0

我想问你为什么这段代码不起作用?它没有任何错误,甚至 cmd.ExecuteNonQuery(); 返回1(如果在数据库中更改了一行),但在实际数据库中,绝对没有变化。对于其他数据库表,此代码可以正常工作,但我也无法从该表中删除一行 - 如果是“只读”,它的行为就像它一样,但我不知道为什么 - 昨天,一切正常并且现在,它突然停止工作:-(

string sConnectionString;

                sConnectionString = "Data Source=.\\SQLEXPRESS; AttachDbFilename=\"" + zdielaneInfo.Adresar + "\\rozvrh.mdf\";";
                sConnectionString += "Integrated Security=True;User Instance=True";
                SqlConnection objConn
                    = new SqlConnection(sConnectionString);
                objConn.Open();



                SqlCommand cmd = new SqlCommand("", objConn);
                if (zdielaneInfo.Edit)

                    cmd.CommandText = "UPDATE subject " +
                                        "SET name = @name, day = @day, timeStart = @timeStart, timeEnd = @timeEnd "
                                        + "WHERE id = @id";
                else
                    cmd.CommandText = "INSERT INTO subject (name, day, timeStart, timeEnd) " +
                                         "Values (@name, @day, @timeStart, @timeEnd)";
                cmd.Parameters.Add(new SqlParameter("@name", txbName.Text));
                cmd.Parameters.Add(new SqlParameter("@day", dniNaInt(cbDen.Text)));
                cmd.Parameters.Add(new SqlParameter("@timeStart", DateTime.Parse(txbStart.Text)));
                cmd.Parameters.Add(new SqlParameter("@timeEnd", DateTime.Parse(txbEnd.Text)));
                cmd.Parameters.Add(new SqlParameter("@id", zdielaneInfo.Id));
                cmd.ExecuteNonQuery();
                objConn.Close();
4

3 回答 3

1

也许桌子被锁定了。

这里,试试这个:

select  
    object_name(P.object_id) as TableName, 
    resource_type, resource_description
from
    sys.dm_tran_locks L
    join sys.partitions P on L.resource_associated_entity_id = p.hobt_id

如果您的表格在结果集中,您就有答案了。


另一种可能性是您用来运行的用户。也许他的特权被撤销了。

于 2012-05-17T15:29:32.617 回答
1

您的问题看起来像 mdf 文件覆盖问题。

您正在访问放置在调试文件夹中并在每次运行应用程序时替换的 mdf 文件。

确保在您的项目中,如果您的解决方案中附加了数据库,则不会覆盖它。因此,在解决方案资源管理器中选择 mdf 文件并确保其“复制到输出”设置为“不复制”,然后手动将 mdf 文件复制到 project\bin\debug 文件夹,然后运行应用程序。

希望能帮助到你。

于 2012-05-17T15:50:19.167 回答
0

停止使用用户实例 / attachdbfilename 选项(用户实例已弃用!)。在真正的 SQL Server 上创建数据库,然后使用连接字符串直接连接到它。使用这个不推荐使用的功能意味着每次启动程序时,您都会从数据库的副本开始,而您昨天插入的内容不再存在 - 如果您使用来自两个不同应用程序的连接字符串连接到数据库,一个人不会看到另一个人正在改变的数据。

于 2012-05-17T16:01:37.600 回答