2017-12-23 7 views
-1

データがExcelシートから割り当てられ、dtatgridviewからSQL Serverテーブルに行が挿入されるdtatgridviewがあります。挿入ボタンをクリックするとエラーが発生します値770214566上記の私の質問のタイトルで宣言された例外は、ユーザの携帯電話番号であり、そのデータ型は、CHAR(9)これは、挿入ボタンの私のコードで私のテーブルに:ほとんどのvarchar型の算術オーバーフローエラー= 770214566.000000000

private void addCarsSaveBtn_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     for (int i = 0; i < addCarsDgv.Rows.Count - 1; i++) 
     { 
      SqlCommand cmd = new SqlCommand("insert into cars(Id,name,carType,stickerNo,plotNo,carPath,mobile,whats) values (@id,@name,@type,@sticker,@plot,@path,@mobile,@whats)", cn); 
      cmd.Parameters.AddWithValue("@id", id + i); 
      cmd.Parameters.AddWithValue("@sticker", Convert.ToInt32(addCarsDgv.Rows[i].Cells[0].Value)); 
      cmd.Parameters.AddWithValue("@name", addCarsDgv.Rows[i].Cells[1].Value); 
      cmd.Parameters.AddWithValue("@mobile", addCarsDgv.Rows[i].Cells[2].Value); 
      cmd.Parameters.AddWithValue("@whats", addCarsDgv.Rows[i].Cells[3].Value); 
      cmd.Parameters.AddWithValue("@type", addCarsDgv.Rows[i].Cells[4].Value); 
      cmd.Parameters.AddWithValue("@plot", addCarsDgv.Rows[i].Cells[5].Value); 
      cmd.Parameters.AddWithValue("@path", addCarsDgv.Rows[i].Cells[6].Value); 

      cmd.ExecuteNonQuery(); 
     } 
     MessageBox.Show("All Done!"); 
    } 
    catch (SqlException ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
} 
+1

非常に簡単 - **使用しないでください。** [悪い](https://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-既に/) – SMor

答えて

0

ケース、AddWithValueはあなたの意図を正しく解釈します。しかし、そうでない場合は、次のいずれかの方法で援助を与えることができます。

  • コンテキストを強制的に一致させるためにデータ型をキャストします。あなたの例では、シンプルな.ToString()がそのトリックを行うかもしれません...そして、もしそれらの小数点が実際に存在するならば、別のエラーがあなたのところに来るのを見ることができます。これは防弾ではありません。これが失敗する可能性のある別の例は、タイムスタンプと日付の両方がC#DateTimeデータ型にキャストされる方法です。
  • パラメータのデータ型については明示的です。

    cmd.Parameters.AddWithValue("@mobile", addCarsDgv.Rows[i].Cells[2].Value); 
    cmd.Parameters[3].SqlDbType = SqlDbType.Char; 
    

    :あなたは非合理的な何かをしない限り、とにかくエラーが発生します(のような数値フィールドに文字を入れて)、これはここで

は、オプション#2を実装する方法の一例である防弾でなければなりませんこれは言うまでもありませんが、 "[3]"は4番目のパラメータであるためです。

または他の人も示唆しているように、AddWithValueを使用しないでください。

関連する問題