将多个数据网格视图值保存到数据库

时间:2014-03-29 05:20:12

标签: c#

我在数据网格视图中有一些行。我想将它们保存在数据库中..请帮我这样做。提前致谢 。我写了以下内容,但它不起作用...... !!!

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");
            }
        }

1 个答案:

答案 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!");
}