SQL Server Express插入不再起作用

时间:2012-02-08 15:11:30

标签: c# sql insert sql-server-2008-express

在我的C#应用​​程序中,我执行以下操作:

using (SqlConnection connection = new SqlConnection(connectionstr))
{
    connection.Open();
    SqlCommand com1 = new SqlCommand("insert into Anfangstierbestand(bestand, jahr, loginid) VALUES (" + bestand + ", " + jahr + ", " + loginid + ");", connection);
    SqlCommand com2 = new SqlCommand("select * from Anfangstierbestand;", connection);

    com1.Connection = connection;
    int ferksum = 0;

    com1.ExecuteNonQuery();
    connection.Close();

    connection.Open();
    SqlDataReader read = com2.ExecuteReader();

    while (read.Read())
    {
        ferksum += Convert.ToInt32(read[2]);
    }

    // MessageBox.Show("Fehler beim Erstellen des Tierbestandes", "Fehler"); }
    MessageBox.Show(ferksum.ToString());
}

这是对数据库的简单插入。如果插入有效,我添加了com2来检查。

不幸的是,com2的值告诉我它可以正常工作,但是当我进入服务器资源管理器并按下执行SQL时,没有新的值。

我不知道原因。上面的代码只是一个例子,因为几天,没有插入工作了(之前,相同的代码工作)。

有人知道原因是什么吗?

编辑

C#:

string connectionstr = "Data Source=.\\SQLEXPRESS;" + "AttachDbFilename=|DataDirectory|\\Datenbank\\FarmersCalc.mdf;" + "Integrated Security=True;" + "User Instance=true;";

EDIT2:

服务器资源管理器:

Data Source=.\SQLEXPRESS;AttachDbFilename="C:\Users\user\Desktop\Farmer´s Calc\Programmierung\WPF\Finanz_WPF\Finanz_WPF\Datenbank\FarmersCalc.mdf";Integrated Security=True;User Instance=True

EDIT3:

以下是专栏:

id int,
jahr int,
anzahl int,
loginid int

EDIT4:

我用表达式混合打开项目是否可能是一个问题?通常,我使用VS 2010 ...

EDIT5:

即使因为我无法回答我的问题(< 100声誉),我在这里写下来:

羞辱我。有些人是对的,这是错误的数据库文件。但是我仍然在想,为什么会发生这种情况,因为我几天之后没有改变任何东西,在此之前,它有效!

感谢所有人的帮助!

4 个答案:

答案 0 :(得分:2)

您正在使用用户实例,为什么?您在服务器资源管理器中连接的实例是否可能与您的应用程序插入数据的实例不同?从应用程序中选择数据时会发生什么情况,它是否反映了您的插入内容?在我看来,根据您的连接字符串,这些是两个完全不同的MDF文件 - 它们具有相同的名称,但它们位于不同的位置。

答案 1 :(得分:1)

问题是implicit transactions吗?您是否需要发出SQL Insert的提交?如果com2告诉您它在那里,那么它可能只会看到它,因为它位于当前SQL事务的上下文中。

您应该共享服务器资源管理器和SqlConnection connectionstr )的连接字符串。确保使用User Instance=true;设置服务器资源管理器连接。

答案 2 :(得分:1)

作为诊断,

 connection.Open();
 int n = com1.ExecuteNonQuery();
 // log or show 'n' , the nr of rows affected

在看到连接字符串后编辑:

|DataDirectory|\中的本地数据库文件很容易被下一个运行或构建命令覆盖。

确保在VS解决方案资源管理器中将它们设置为“从不复制”或“在较新时复制”。

答案 3 :(得分:1)

也许在此代码上方的callstack中,有人添加了TransactionScope。

这会导致连接在事务中自动注册,并且连接可以看到通过尚未提交的事务插入的数据。在没有调用scope.Complete的情况下退出作用域时,事务将被回滚并且不会保存任何数据。