[英]Insert data in Sql Server datable from Datagridview c#
我在从datagridview的datatable中插入数据时遇到问题,这是我的代码:
SqlConnection con1 = new SqlConnection();
con1.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\GestStock.mdf;Integrated Security=True;User Instance=True";
con1.Open();
string insertcmd = "INSERT INTO [Article] (CodeArticle,LibelleFr,LibelleAr,IdCategorie,InfomationsDetaille,Quantite,StockActuel,StockMinimum,PrixAchat,DateAchat,NumeroFacture)" +
"VALUES(@CodeArticle1,@LibelleFr1,@LibelleAr1,@IdCategorie1 ,@InfomationsDetaille1,@Quantite1,@StockActuel1,@StockMinimum1,@PrixAchat1,@DateAchat1,@NumeroFacture1)";
using (SqlCommand cmd = new SqlCommand(insertcmd,con1))
{
cmd.Parameters.Add("@CodeArticle1", SqlDbType.NVarChar);
cmd.Parameters.Add("@LibelleFr1",SqlDbType.NVarChar);
cmd.Parameters.Add("@LibelleAr1",SqlDbType.NVarChar);
cmd.Parameters.Add("@IdCategorie1",SqlDbType.Int);
cmd.Parameters.Add("@InfomationsDetaille1",SqlDbType.NVarChar);
cmd.Parameters.Add("@Quantite1",SqlDbType.Int);
cmd.Parameters.Add("@StockActuel1",SqlDbType.Int);
cmd.Parameters.Add("@StockMinimum1",SqlDbType.Int);
cmd.Parameters.Add("@PrixAchat1",SqlDbType.Int);
cmd.Parameters.Add("@DateAchat1",SqlDbType.Date);
cmd.Parameters.Add("@NumeroFacture1",SqlDbType.NVarChar);
for(int i = 0; i < dataGridView2.Rows.Count; i++)
{
cmd.Parameters["@CodeArticle1"].Value= dataGridView2.Rows[i].Cells["codeArticleDataGridViewTextBoxColumn"].Value;
cmd.Parameters["@LibelleFr1"].Value= dataGridView2.Rows[i].Cells["libelleFrDataGridViewTextBoxColumn"].Value;
cmd.Parameters["@LibelleAr1"].Value= dataGridView2.Rows[i].Cells["libelleArDataGridViewTextBoxtColumn"].Value;
cmd.Parameters["@IdCategorie1"].Value= dataGridView2.Rows[i].Cells["idCategorieDataGridViewTexBoxColumn"].Value;
cmd.Parameters["@InfomationsDetaille1"].Value= dataGridView2.Rows[i].Cells["InfomationsDetailleDataGridViewTextBoxColumn"].Value;
cmd.Parameters["@Quantite1"].Value= dataGridView2.Rows[i].Cells["QuantiteDataGridViewTextBoxColumn"].Value;
cmd.Parameters["@StockActuel1"].Value= dataGridView2.Rows[i].Cells["StockActuelDataGridViewTextBoxColumn"].Value;
cmd.Parameters["@StockMinimum1"].Value= dataGridView2.Rows[i].Cells["StockMinimumDataGridViewTextBoxColumn"].Value;
cmd.Parameters["@PrixAchat1"].Value= dataGridView2.Rows[i].Cells["PrixAchatDataGridViewTextBoxColumn"].Value;
cmd.Parameters["@DateAchat1"].Value= dataGridView2.Rows[i].Cells["DateAchatDataGridViewTextBoxColumn"].Value;
cmd.Parameters["@NumeroFacture1"].Value= dataGridView2.Rows[i].Cells["NumeroFactureDataGridViewTextBoxColumn"].Value;
}
cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
con1.Close();
}
MessageBox.Show("données enregistrés");
但是我得到了这个错误信息:
参数化查询'((@ CodeArticle1 nvarchar(4000),@ LibelleFr1 nvarchar(4000),@ Libell)期望未提供参数'@ CodeArticle1'。
编辑:
我在for循环中将此条件添加到所有参数:
if (dataGridView2.Rows[i].Cells["codeArticleDataGridViewTextBoxColumn"].Value == null)
{
cmd.Parameters["@CodeArticle1"].Value = DBNull.Value;
}
else
{
cmd.Parameters["@CodeArticle1"].Value = dataGridView2.Rows[i].Cells["codeArticleDataGridViewTextBoxColumn"].Value;
}
我收到此错误消息:
不能将值NULL插入表'C:\\ DOCUMENTS AND SETTINGS \\ ADMINISTRATEUR \\ MES DOCUMENTS \\ GESTIONSTOCK \\ GESTIONSTOCK \\ BIN \\ DEBUG \\ GESTSTOCK.MDF.dbo.Article'列的'CodeArticle'中; 列不允许为空。 INSERT失败。 该语句已终止
有人可以解决吗?
谢谢
您的代码可能不会进入for循环,因为dataGridView2可能为空。
您的后续问题很可能是,由于仅执行最后一行,因此只会保存dataGridView2中的最后一个条目。
更新:
您不应该更改您的问题。 最好发布一个新的。
但是您的新问题是数据库问题。 您将列声明为不可为空,然后尝试插入空值。 更改您的列的数据库表定义。
它显示了我提到的后续问题。 您的dataGridView行比您想象的多。 这是“添加新”行(该行前面带有星号的行)。 这也是一行,并为您提供所有空值。 它是最后一行,因此它是写入参数的最后一个值。
试试这个代码:
SqlConnection con1 = new SqlConnection();
con1.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\GestStock.mdf;Integrated Security=True;User Instance=True";
string insertcmd = "INSERT INTO [Article] (CodeArticle,LibelleFr,LibelleAr,IdCategorie,InfomationsDetaille,Quantite,StockActuel,StockMinimum,PrixAchat,DateAchat,NumeroFacture)" +
"VALUES(@CodeArticle1,@LibelleFr1,@LibelleAr1,@IdCategorie1 ,@InfomationsDetaille1,@Quantite1,@StockActuel1,@StockMinimum1,@PrixAchat1,@DateAchat1,@NumeroFacture1)";
SqlCommand cmd=new SqlCommand(insertcmd,con1);
con1.Open();
for (int i = 0; i < dataGridView2.Rows.Count - 1; i++)
{
cmd.Parameters.AddWithValue("@CodeArticle1", dataGridView2.Rows[i].Cells["codeArticleDataGridViewTextBoxColumn"].Value);
cmd.Parameters.AddWithValue("@LibelleFr1",dataGridView2.Rows[i].Cells["libelleFrDataGridViewTextBoxColumn"].Value);
cmd.Parameters.AddWithValue("@LibelleAr1",dataGridView2.Rows[i].Cells["libelleArDataGridViewTextBoxColumn"].Value);
cmd.Parameters.AddWithValue("@IdCategorie1",dataGridView2.Rows[i].Cells["idCategorieDataGridViewTextBoxColumn"].Value);
cmd.Parameters.AddWithValue("@InfomationsDetaille1",dataGridView2.Rows[i].Cells["InfomationsDetailleDataGridViewTextBoxColumn"].Value);
cmd.Parameters.AddWithValue("@Quantite1",dataGridView2.Rows[i].Cells["QuantiteDataGridViewTextBoxColumn"].Value);
cmd.Parameters.AddWithValue("@StockActuel1",dataGridView2.Rows[i].Cells["StockActuelDataGridViewTextBoxColumn"].Value);
cmd.Parameters.AddWithValue("@StockMinimum1",dataGridView2.Rows[i].Cells["StockMinimumDataGridViewTextBoxColumn"].Value);
cmd.Parameters.AddWithValue("@PrixAchat1",dataGridView2.Rows[i].Cells["PrixAchatDataGridViewTextBoxColumn"].Value);
cmd.Parameters.AddWithValue("@DateAchat1",dataGridView2.Rows[i].Cells["DateAchatDataGridViewTextBoxColumn"].Value);
cmd.Parameters.AddWithValue("@NumeroFacture1",dataGridView2.Rows[i].Cells["NumeroFactureDataGridViewTextBoxColumn"].Value);
cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
}
MessageBox.Show("données enregistrés");
con1.Close();
并确保在检查数据库时位于位于DataDirectory路径而不位于项目文件夹路径中的数据库中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.