我在数据网格视图中有一些行。我想将它们保存在数据库中..请帮我这样做。提前致谢 。我写了以下内容,但它不起作用...... !!!
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");
}
}
答案 0 :(得分:2)
问题:您需要将字符串列CourseName
括在单引号中。
解决方案1:我不推荐这个:
试试这个:
StrQuery = @"INSERT INTO student_reg VALUES (" + id + ",'"
+ addcrsView.Rows[i].Cells["Course Name"].Value + "', "
+ addcrsView.Rows[i].Cells["Credit"].Value + ");";
您的查询对 sql injection攻击开放我建议您使用参数化查询来避免它们。
解决方案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();
}
解决方案3:这只是一个建议:
只有在成功插入所有记录时才能显示成功消息。
使用参数化查询:
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!");
}