为什么它不起作用(C# 中的 SQL 命令

本文关键字:中的 SQL 命令 不起作用 为什么 | 更新日期: 2023-09-27 18:34:34

我想问你为什么这段代码不起作用?它没有任何错误,甚至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();

为什么它不起作用(C# 中的 SQL 命令

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

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

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

希望对您有所帮助。

也许表已锁定。

从这里,试试这个:

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

如果您的表在结果集中,则您有答案。


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

停止使用用户实例/附加数据库文件名选项(用户实例已弃用!在实际的 SQL Server 上创建数据库,然后使用连接字符串直接连接到该数据库。使用此已弃用的功能意味着每次启动程序时,您都会从数据库的新副本开始,并且您昨天插入的内容不再存在 - 如果您使用来自两个不同应用程序的该连接字符串连接到数据库,则其中一个应用程序不会看到另一个应用程序正在更改的数据。