C# 将多个数据网格视图值保存到数据库
我在数据网格视图中有一些行。我想将它们一起保存在数据库中..请帮我这样做。提前谢谢。我写了以下内容,但它不起作用C# 将多个数据网格视图值保存到数据库,c#,C#,我在数据网格视图中有一些行。我想将它们一起保存在数据库中..请帮我这样做。提前谢谢。我写了以下内容,但它不起作用 private void btnSave_Click(object sender, EventArgs e) { string StrQuery; try { using (SqlCommand comm = new SqlCommand())
private void btnSave_Click(object sender, EventArgs e)
{
string StrQuery;
try
{
using (SqlCommand comm = new SqlCommand())
{
comm.Connection = myConnection;
myConnection.Open();
for (int i = 0; i < addcrsView.Rows.Count; i++)
{
StrQuery = @"INSERT INTO student_reg VALUES (" + id + ","
+ addcrsView.Rows[i].Cells["Course Name"].Value + ", "
+ addcrsView.Rows[i].Cells["Credit"].Value + ");";
comm.CommandText = StrQuery;
if (comm.ExecuteNonQuery() > 0)
{
MessageBox.Show("inserted");
}
else
{
MessageBox.Show("Not insert");
}
}
}
}
catch
{
MessageBox.Show("Catch");
}
}
private void btnSave\u单击(对象发送者,事件参数e)
{
字符串StrQuery;
尝试
{
使用(SqlCommand comm=newsqlcommand())
{
通信连接=myConnection;
myConnection.Open();
对于(int i=0;i0)
{
MessageBox.Show(“插入”);
}
其他的
{
MessageBox.Show(“非插入”);
}
}
}
}
抓住
{
MessageBox.Show(“Catch”);
}
}
问题:您需要将字符串列CourseName
括在单引号内
解决方案1:我不建议这样做:
试试这个:
StrQuery = @"INSERT INTO student_reg VALUES (" + id + ",'"
+ addcrsView.Rows[i].Cells["Course Name"].Value + "', "
+ addcrsView.Rows[i].Cells["Credit"].Value + ");";
您的查询容易受到sql注入攻击,我建议您使用参数化查询来避免这些攻击
解决方案2:
for (int i = 0; i < addcrsView.Rows.Count; i++)
{
StrQuery = @"INSERT INTO student_reg VALUES (@id,@CourseName,@Credits)";
comm.CommandText = StrQuery;
comm.Parameters.AddWithValue("@id",id);
comm.Parameters.AddWithValue("@CourseName",addcrsView.Rows[i].
Cells["Course Name"].Value);
comm.Parameters.AddWithValue("@Credits",addcrsView.Rows[i].
Cells["Credit"].Value);
if (comm.ExecuteNonQuery() > 0)
{
MessageBox.Show("inserted");
}
else
{
MessageBox.Show("Not insert");
}
comm.Parameters.Clear();
}
int rowsCount = addcrsView.Rows.Count;
int rowsInserted = 0;
for (int i = 0; i < rowsCount; i++)
{
StrQuery = @"INSERT INTO student_reg VALUES (@id,@CourseName,@Credits)";
comm.CommandText = StrQuery;
comm.Parameters.AddWithValue("@id",id);
comm.Parameters.AddWithValue("@CourseName",addcrsView.Rows[i].
Cells["Course Name"].Value);
comm.Parameters.AddWithValue("@Credits",addcrsView.Rows[i].
Cells["Credit"].Value);
if (comm.ExecuteNonQuery() > 0)
{
rowsInserted++;
}
comm.Parameters.Clear();
}//end of for loop
if(rowsCount == rowsInserted)
{
MessageBox.Show("All Rows Inserted Successfully!");
}
else
{
MessageBox.Show("All Rows Not Inserted Successfully!");
}
使用参数化查询:
for (int i = 0; i < addcrsView.Rows.Count; i++)
{
StrQuery = @"INSERT INTO student_reg VALUES (@id,@CourseName,@Credits)";
comm.CommandText = StrQuery;
comm.Parameters.AddWithValue("@id",id);
comm.Parameters.AddWithValue("@CourseName",addcrsView.Rows[i].
Cells["Course Name"].Value);
comm.Parameters.AddWithValue("@Credits",addcrsView.Rows[i].
Cells["Credit"].Value);
if (comm.ExecuteNonQuery() > 0)
{
MessageBox.Show("inserted");
}
else
{
MessageBox.Show("Not insert");
}
comm.Parameters.Clear();
}
int rowsCount = addcrsView.Rows.Count;
int rowsInserted = 0;
for (int i = 0; i < rowsCount; i++)
{
StrQuery = @"INSERT INTO student_reg VALUES (@id,@CourseName,@Credits)";
comm.CommandText = StrQuery;
comm.Parameters.AddWithValue("@id",id);
comm.Parameters.AddWithValue("@CourseName",addcrsView.Rows[i].
Cells["Course Name"].Value);
comm.Parameters.AddWithValue("@Credits",addcrsView.Rows[i].
Cells["Credit"].Value);
if (comm.ExecuteNonQuery() > 0)
{
rowsInserted++;
}
comm.Parameters.Clear();
}//end of for loop
if(rowsCount == rowsInserted)
{
MessageBox.Show("All Rows Inserted Successfully!");
}
else
{
MessageBox.Show("All Rows Not Inserted Successfully!");
}
for(int i=0;i0)
{
MessageBox.Show(“插入”);
}
其他的
{
MessageBox.Show(“非插入”);
}
comm.Parameters.Clear();
}
解决方案3:这只是一个建议:
只有在成功插入所有记录时,才能显示成功消息
使用参数化查询:
for (int i = 0; i < addcrsView.Rows.Count; i++)
{
StrQuery = @"INSERT INTO student_reg VALUES (@id,@CourseName,@Credits)";
comm.CommandText = StrQuery;
comm.Parameters.AddWithValue("@id",id);
comm.Parameters.AddWithValue("@CourseName",addcrsView.Rows[i].
Cells["Course Name"].Value);
comm.Parameters.AddWithValue("@Credits",addcrsView.Rows[i].
Cells["Credit"].Value);
if (comm.ExecuteNonQuery() > 0)
{
MessageBox.Show("inserted");
}
else
{
MessageBox.Show("Not insert");
}
comm.Parameters.Clear();
}
int rowsCount = addcrsView.Rows.Count;
int rowsInserted = 0;
for (int i = 0; i < rowsCount; i++)
{
StrQuery = @"INSERT INTO student_reg VALUES (@id,@CourseName,@Credits)";
comm.CommandText = StrQuery;
comm.Parameters.AddWithValue("@id",id);
comm.Parameters.AddWithValue("@CourseName",addcrsView.Rows[i].
Cells["Course Name"].Value);
comm.Parameters.AddWithValue("@Credits",addcrsView.Rows[i].
Cells["Credit"].Value);
if (comm.ExecuteNonQuery() > 0)
{
rowsInserted++;
}
comm.Parameters.Clear();
}//end of for loop
if(rowsCount == rowsInserted)
{
MessageBox.Show("All Rows Inserted Successfully!");
}
else
{
MessageBox.Show("All Rows Not Inserted Successfully!");
}
int rowscont=addcrsView.Rows.Count;
int rowsInserted=0;
for(int i=0;i0)
{
行插入++;
}
comm.Parameters.Clear();
}//循环结束
如果(rowsCount==rowsInserted)
{
Show(“所有行插入成功!”);
}
其他的
{
Show(“未成功插入所有行!”);
}
多谢帮助,因为我是初学者,所以我不考虑SQL注入,但多亏了小心的建议。@Sudhakar TillapudiBut它只保存第一行gridview,我希望所有的gridview行都在前面。@SudhakarTillapudi@user3103779:您正在使用哪种解决方案<代码>解决方案1或解决方案2
?如果它只保存一条记录,则首先检查addcrsView.Rows.Count
它返回什么?因为答案似乎很完美。@user3103779:请检查解决方案3
。