.net 这将调用存储过程。
可能是您正在回滚事务。这就解释了为什么没有发生争吵。如果您能够观察到_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分析器中的一个错误。.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
我在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;
}
}
}