.net 这将调用存储过程。

.net 这将调用存储过程。,.net,sql,sql-server,ado.net,.net,Sql,Sql Server,Ado.net,可能是您正在回滚事务。这就解释了为什么没有发生争吵。如果您能够观察到_id变量已设置,我认为proj_ins_all不会失败。如果抛出异常,则不会发生这种情况。因此,事务必须是有效的,并且正在回滚。您的事务未提交,或者异常被抛出并被吃掉(忽略)。如果您在C#中有一个DateTime值,它将作为DateTime原样传递给SQL Server 如果在C#中有一个字符串值要作为DATETIME参数传递,它将根据操作系统和数据库的语言/文化设置进行一些本地化转换 我建议您确保您的代码确实传递了DateT

可能是您正在回滚事务。这就解释了为什么没有发生争吵。如果您能够观察到_id变量已设置,我认为proj_ins_all不会失败。如果抛出异常,则不会发生这种情况。因此,事务必须是有效的,并且正在回滚。

您的事务未提交,或者异常被抛出并被吃掉(忽略)。

如果您在C#中有一个DateTime值,它将作为DateTime原样传递给SQL Server

如果在C#中有一个字符串值要作为DATETIME参数传递,它将根据操作系统和数据库的语言/文化设置进行一些本地化转换

我建议您确保您的代码确实传递了DateTime值(您可以在调用SP之前检查其正确性)

大宗报价

将数据类型varchar转换为datetime时出错

因为我是手动测试它的,所以我简单地将日期时间从'2009-09-03 16:20:11.7130000'缩短到'2009-09-03 16:20:11',这修复了错误;现在这一行插入得很好

大宗报价 这是SQL分析器中的一个错误。


我在msdn上找不到ExecuteIntScalar的任何链接该死,对不起!我应该提到,这是一个有人制作的方法,基本上只调用SqlCommand.ExecuteScalar()。抱歉搞混了!就这样!助手类的一个函数中缺少cmd.Transaction.Commit()!知道为什么会被忽略吗?我可以打开或关闭sql server中的变量以使其不隐藏重要错误吗?首先:确保提交事务。如果仍然相同,则调试.net代码以查看是否引发异常(在执行期间…(…)。或者只需将您的呼叫包装在try catch中并记录错误。我没有看到SqlServer只是默默地失败,没有通知客户机/调用者。因此,如果它不是提交,那么它很可能出现在您的.NET代码上,而不是SQLServer上。对不起,我的错误-毕竟是事务(或者更确切地说,是我的前演示者的错误,他将事务用于他的一些方法,而不是其他方法,从而使我相信我使用的代码实际上没有使用事务)。NP,唯一重要的是你发现了问题所在。干杯。好主意,谢谢,这帮了大忙(请参阅问题更新)。设置了_id变量。如果抛出异常,则不会发生这种情况。-没错,我也是这么想的,但事实证明,事实就是如此。非常奇怪的IMHO(参见更新的问题)。对不起,我的坏消息——毕竟是事务(或者更确切地说,是我的前讲师的坏消息,他在他的一些方法中使用了事务,而不是其他方法,因此让我相信我正在使用的代码没有使用事务,而实际上是使用事务)。
ALTER procedure proj_ins_all 
(
@proj_number INT, 
@usr_id INT, 
@download DATETIME, 
@status INT 
)
as
INSERT INTO project
(proj_number, usr_id, date_download, status_id)
VALUES
(@proj_number, @usr_id, @download, @status)
select SCOPE_IDENTITY()
exec proj_ins_all 9001210, 2, '2009-09-03', 2 
_id = data.ExecuteIntScalar("proj_ins_all", arrParams);
exec proj_ins_all @proj_number=9001810,@usr_id=2,@download='2009-09-03 16:20:11.7130000',@status=2
data.MakeInParam("@proj_number", SqlDbType.Int, _projNo),
data.MakeInParam("@usr_id", SqlDbType.Int, _usr.Id),
data.MakeInParam("@download", SqlDbType.SmallDateTime, _downloadDate),
data.MakeInParam("@status", SqlDbType.Int, (int)_status),
param = new SqlParameter(paramName, DbType);
SqlCommand cmd = CreateCommand(procName, prams);
object result = cmd.ExecuteScalar();
// call the proj_ins_all SP every time a button is clicked.
protected void Button1_Click(object sender, EventArgs e)
{
    using (SqlConnection conn = new SqlConnection(myConnectionString))
    using (SqlCommand cmd = new SqlCommand("proj_ins_all", conn))
    {
        try
        {
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add(new SqlParameter("@proj_number", SqlDbType.Int));
            cmd.Parameters["@proj_number"].Value = 9001810;
            cmd.Parameters.Add(new SqlParameter("@usr_id", SqlDbType.Int));
            cmd.Parameters["@usr_id"].Value = 2;
            cmd.Parameters.Add(new SqlParameter("@download", SqlDbType.SmallDateTime));
            cmd.Parameters["@download"].Value = "2009-09-03 16:20:11";
            cmd.Parameters.Add(new SqlParameter("@status", SqlDbType.Int));
            cmd.Parameters["@status"].Value = 2;

            conn.Open();
            cmd.Transaction = conn.BeginTransaction();

            object _id = cmd.ExecuteScalar();

            // _id now contains the value of the Identity column for
            // the row just inserted by proj_ins_all

            // Assume (or simulate) an error is raised after the SP is called but
            // before the transaction is committed.
            // (Comment this line out and the DB update succeeds, as expected.)
            throw new Exception();

            // If the transaction is not committed, it'll be rolled back when
            // the connection is closed and the inserted row won't be in the
            // table even though the incremented Identity value was returned above.
            cmd.Transaction.Commit();

        }
        catch (Exception)
        {
            // "swallow" (i.e. just ignore) any errors raised by the DB code.
            //throw;
        }
    }

}