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