2016-05-03 33 views
-2

私は問題、追加情報があります:パラメータ化クエリ 'MaKhachHangのデータ型はnvarchar @(@idのnvarchar(4000)、(4)、MaHangのデータ型はnvarchar(40 @' でしたパラメータ '@id' を、期待し'System.Data.SqlClient.SqlException'型の未処理の例外がSystem.Data.dllで発生しました。

を供給されない。

using (SqlConnection sqlCon = new SqlConnection(sqlCnt)) 
{ 
    for (int i = 1; i < metroGrid2.Rows.Count; i++) 
    { 
     SqlCommand cmd = new SqlCommand("INSERT INTO Yeucaukhachang(id,MaKhachHang,MaHang,TenHang,DonViTinh,Dongia,SoLuong,Duyet) 
       values(@id,@MaKhachHang,@MaHang,@TenHang,@DonViTinh,@Dongia,@SoLuong,@Duyet)", sqlCon); 
     cmd.Parameters.AddWithValue("@id", metroGrid2.Rows[i].Cells[1].Value); 
     cmd.Parameters.AddWithValue("@MaKhachHang", makh.Text); 
     cmd.Parameters.AddWithValue("@MaHang", metroGrid2.Rows[i].Cells[2].Value); 
     cmd.Parameters.AddWithValue("@TenHang", metroGrid2.Rows[i].Cells[3].Value); 
     cmd.Parameters.AddWithValue("@SoLuong", metroGrid2.Rows[i].Cells[4].Value); 
     cmd.Parameters.AddWithValue("@DonViTinh", metroGrid2.Rows[i].Cells[5].Value); 
     cmd.Parameters.AddWithValue("@Dongia", metroGrid2.Rows[i].Cells[6].Value); 
     cmd.Parameters.AddWithValue("@Duyet", 'N'); 
     sqlCon.Open(); 
     cmd.ExecuteNonQuery(); 
     sqlCon.Close(); 
     MessageBox.Show("Thêm thành công, chuyển qua xác nhận yêu cầu"); 
    }    
} 
+0

デバッガを使用してコードをステップ実行し、必要な値を評価します。プログラミングで言うように 'Code&Go'だけではありません。 – MethodMan

答えて

0

おそらくnullを渡している。あなたは関係なく、ソース・データがnullであるか否かの@idの値を準備するmetroGrid2.Rows[i].Cells[1].Value??DBNull.Valueとして@idために渡された値を、合体することができる。

+0

これはコメントではありません。 –

+0

sr、 'metroGrid2'の値をテストしています –

+0

あなたの提案されたコードはコンパイラエラーをスローしますか?それを試しましたか? –

2

エラーメッセージは少し誤解を招くことがあります。問題は、@idに指定している値がnullで、DBNull.valueに変換されていない可能性が最も高いです。これはあなたの値がnullのときを検出し、DBNull.Valueでそれを置き換えるためにnull合体演算子??を使用します

cmd.Parameters.AddWithValue("@id", (object) metroGrid2.Rows[i].Cells[1].Value ?? DBNull.Value); 

:これを試してみてください。

+0

ありがとう、私はテストされます:D –

関連する問題