使用 SQL 服务器将新行数据插入 C# Windows 表单

Inserting new row of data into C# Windows Form using SQL Server

感谢 Nate M。我得到了这个 运行,使用代码的第二部分,并在 SQL 服务器中接受了一些教育(这是我的第一天) 这样就解决了。谢谢大家的帮助。

我想不通。我使用的是 Visual Studio 2015,SQL Server 2014,可以使用,但我不知道如何通过单击按钮插入数据。我在 MSDN 上尝试过一些东西,没有任何效果,他们有大约 100 种不同的方法。我很困惑。这是我得到的。

private void btnTheWorst_Click(object sender, EventArgs e)
{
    lblMood.Text = "The Worst :(";
    lblMood.ForeColor = System.Drawing.Color.Navy;

    SqlConnection cmood = new SqlConnection("my connection string"); {

    cmood.Rows.Add(new Object[] { 1, "Smith" });
}

这是我收到错误的地方。

SqlConnection does not contain a definition for 'Rows' and no extension method 'Rows' accepting a first argument of type 'SqlConnection' could be found.

看看这个,它提供了有关如何将数据插入数据库的公平知识。 您可以查看 使用命令对象插入新记录 部分 https://msdn.microsoft.com/en-us/library/ms233812.aspx

评论完全正确。要与数据库交互,您需要执行一系列特定的事件。我在便签本上保留了一段代码,因为我经常使用它,它概述了您需要做的事情的基本结构。

using(var conn = new SqlConnection(<connection string here>))
{
    try
    {
        conn.Open();
        string sql = "<sql query here>";
        using(var cmd = new SqlCommand(sql,conn))
        {
            using(var reader = cmd.ExecuteReader())
            {
                if(reader.HasRows)
                {
                    while(reader.Read())
                    {
                        //Here is where you get your data..
                        int imReadingAnInt = (int)reader["myIntColumnHeader"];
                        string imReadingAString = reader["myStringColumnHeader"].ToString();
                    }
                }
            }
        }
    }
    catch (Exception ex)
    {
        string err = ex.Message;
    }
}

关于插入:

您可以使用上述方法起草一个sql插入,然后使用cmd.ExecuteNonQuery()执行插入。一个例子..

using(var conn = new SqlConnection(<connection string here>))
{
    try
    {
        conn.Open();
        string sql = "insert into [table_name] values (@column1Value,@column2Value,...);";
        using(var cmd = new SqlCommand(sql,conn))
        {
            cmd.Parameters.AddWithValue("@column1Value",1);//Presuming column 1 is an int
            cmd.Parameters.AddWithValue("@column2Value","Smith"); //Presuming column 2 is a varchar (string)
            cmd.ExecuteNonQuery();
        }
    }
    catch (Exception ex)
    {
        string err = ex.Message;
    }
}

注意上面的代码使用参数化 (sp) 来防止 SQL 注入。您可以将这些值硬编码到 SQL 查询字符串中,但从安全角度来看,这不是最佳做法。

W3 Schools SQL Insert

我的大脑一直在思考这个问题。这里只是对基本概念的注释。使用对象 SqlConnection、SqlCommand 等,您实际上并没有建立对数据库的直接访问(即您不能只是去获取一行并手动编辑它)。相反,您正在建立一个连接,通过它您可以执行 SQL 查询,这是一种结构良好的读取和编辑数据库的方法。当然,关于如何构建上述查询的信息有很多,所以一旦您理解了所讨论的 C# 对象的用途,访问和更改数据库就会变得更有意义。