【问题标题】:SQL server express, cannot read or write in C#SQL Server Express,无法用 C# 读取或写入
【发布时间】:2013-10-10 15:35:41
【问题描述】:

我编写了一个代码,可以自动从我的 SQL Server 2012 Express 表 Logins 添加和读取信息。但它不会工作,这里是代码:

private void Form1_Load(object sender, EventArgs e)
    {
        SqlConnection myConnection = new SqlConnection("user id=myComputer;" + "server=MYCOMPUTER-PC\\SQLEXPRESS;" +
                "Trusted_Connection=yes;" + "database=loginTest; " + "connection timeout=5");
        try
        {
            myConnection.Open();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
        SqlCommand myCommand = new SqlCommand("INSERT INTO dbo.Logins Values ('John','Password','Admin')", myConnection);
        try
        {
            SqlDataReader myReader = null;
            SqlCommand myCommand1 = new SqlCommand("select * from Logins",
                                                     myConnection);
            myReader = myCommand1.ExecuteReader();
            while (myReader.Read())
            {
                MessageBox.Show(myReader["Column1"].ToString());
                MessageBox.Show(myReader["Column2"].ToString());
            }
        }
        catch (Exception ex1)
        {
            MessageBox.Show(ex1.ToString());
        }
    }

我已经调试了程序,一切似乎都很好,它跳过了:

        {
            MessageBox.Show(myReader["Column1"].ToString());
            MessageBox.Show(myReader["Column2"].ToString());
        }

出于某种原因,它没有写入我告诉它的值。

谁能告诉我为什么?我是 SQL 的初学者,所以请放轻松:)

PS 它不会触发任何错误代码或异常

【问题讨论】:

  • 你永远不会 execute INSERT 命令
  • 离题提示:尽量不要用这么多的 try-catch 块污染你的代码。

标签: c# sql sql-server winforms


【解决方案1】:

Logins表没有任何记录,如果你的意思是你想先尝试插入一些记录来测试,是这行导致你的问题:

SqlCommand myCommand = new SqlCommand("INSERT INTO dbo.Logins Values ('John','Password','Admin')", myConnection);
myCommand.ExecuteNonQuery();//Do this to insert something into your Logins first.

【讨论】:

  • 谢谢!那么为什么需要这样做呢?
  • @user2827904 调用ExecuteNonQuery正式对您的表运行查询。您应该在ExecuteNonQuery 上进行更多搜索。当然,正如我所说,如果你的表有一些记录,你的代码会工作,但它没有。以这种方式插入只是为了确保有一些记录用于测试下一个 SELECT 查询,通常我们不会这样做(先插入,然后再选择)
【解决方案2】:

它跳过 [...]

大概是因为没有数据要读取,所以myReader.Read() 只返回false

它没有写入我告诉它的值。

你实际上并没有告诉它写任何东西。您创建一个SqlCommand 来插入数据,但您从不执行它。您需要使用myCommand.ExecuteNonQuery。您还应该对命令、连接和阅读器使用using 语句,以确保它们正确关闭。

【讨论】:

    猜你喜欢
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    • 2018-08-13
    • 2018-09-03
    • 2011-01-22
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    相关资源
    最近更新 更多