【问题标题】:Inserting new row of data into C# Windows Form using SQL Server [closed]使用 SQL Server 将新数据行插入 C# Windows 窗体 [关闭]
【发布时间】:2016-06-24 10:48:16
【问题描述】:

感谢 Nate M。我已经使用第二部分代码运行了这个程序,并在 SQL Server 中进行了一些学习(这是我的第一天) 所以解决了。谢谢大家的帮助。

我想不通。我正在使用 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 不包含“Rows”的定义,并且找不到接受“SqlConnection”类型的第一个参数的扩展方法“Rows”。

【问题讨论】:

  • 您真的很想从 ADO.NET 的介绍性教程开始。许多教程都涵盖了与数据库的交互,并且在线上有无数个示例。正如错误所述,SqlConnection 对象没有名为 Rows 的属性。从来没有。
  • 我使用的是 MSDN 网站上的代码......但他们的方法都没有奏效。
  • “我正在使用 Visual Studio 2015、SQL Server 2014,它可以工作......”感谢上帝!如果这不起作用,我们都会有麻烦。我希望你阅读和笑
  • 我投票决定将此问题作为离题结束,因为它不是基于问题,而是基于缺乏研究。快速谷歌“插入行 sql server c#”会回答这个问题

标签: c# sql sql-server-2014


【解决方案1】:

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

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# 对象的用途,访问和更改数据库就会变得更有意义。

【讨论】:

  • 谢谢,第二个修复成功了。我一直在玩 Insert INTO,但搞砸了。这行得通。
  • 很高兴听到您解决了问题。
  • 好吧,它没有插入数据库.. 玩这个。查看 .xsd 文件,它没有更新,但没有出现错误。
  • hrm.. 好吧,插入数据可能是一种锁定权限,具体取决于您的数据库的配置方式。我会验证您的连接字符串并确保您的用户具有将数据插入您正在使用的数据库的适当权限。此外,请确保您的表名正确,并且当您填写每一列(括号中的区域)时,您会完全填充数据。我的意思是,如果您有一个包含 5 列的表,那么您将提供 5 个适当类型的值。最后,在 catch 语句中放置一个断点,看看它是否在调试时被命中。
  • 谢谢。现在要仔细检查我的 SQL Server 设置。
【解决方案2】:

看看这个,它提供了关于如何将数据插入数据库的公平知识。 您可以检查 Insert New Records Using Command Objects 部分 https://msdn.microsoft.com/en-us/library/ms233812.aspx

【讨论】:

  • 我已经尝试了几次,但都没有运气。不过,谢谢。
猜你喜欢
  • 1970-01-01
  • 2021-12-20
  • 1970-01-01
  • 2020-10-31
  • 1970-01-01
  • 2013-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多