每当我运行以下代码时,我都会得到预期的输出
private int NewBorrower(string givenName, string surname)
{
int returnValue = 0;
using (conn)
{
conn.Open();
string sql = "AddBorrower";
cmd = new SqlCommand(sql, conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@givenName", SqlDbType.NVarChar).Value = givenName;
cmd.Parameters.Add("@surname", SqlDbType.NVarChar).Value = surname;
SqlParameter id = cmd.Parameters.Add("@id", SqlDbType.Int);
id.Direction = ParameterDirection.ReturnValue;
try
{
cmd.ExecuteNonQuery();
returnValue = (int)cmd.Parameters["@id"].Value;
}
catch (Exception e)
{
Console.WriteLine("Commit Exception Type: {0}", e.GetType());
Console.WriteLine(" Message: {0}", e.Message);
}
}
return returnValue;
}
从前端运行时,我得到了我想要的结果,但是当我检查数据库时,它没有显示在表格中。
为了更好地衡量,这也是正在使用的存储过程
CREATE PROCEDURE [dbo].[AddBorrower]
@givenName nvarchar(50),
@surname nvarchar(50),
@id int = NULL OUTPUT
AS
INSERT INTO llBorrowers (givenName, surname)
VALUES (@givenName, @surname);
SET @id = SCOPE_IDENTITY();
RETURN @id
我已尝试在c#和sql端使用事务,但这根本不起作用。 我还应该提一下,它是一个本地数据库,但我不确定是否应该影响它。
答案 0 :(得分:2)
在WinForms应用程序中使用DataDirectory替换字符串时,其实际值会根据您的调试或发布配置而更改。
在DEBUG中,您的DataDirectory指向PROJECTFOLDER \ BIN \ DEBUG(如果是这种情况,则指向x86变体)。
所以很容易被这个愚弄。您可以在服务器资源管理器中创建连接,但在不同数据库上运行的代码会忽略此连接。
您可以在服务器资源管理器中创建另一个连接并将其命名为DebugConnection,在使用DebugConnection检查代码是否按预期执行时仍保留原始连接以进行架构更改
作为附注,如果在项目项之间列出了MDF文件,请特别注意属性Copy To the Output Directory
属性。如果每次启动调试会话时将其设置为Copy Always
,则会将数据库的新副本从项目目录复制到输出目录,从而有效地破坏代码执行的更新。我建议将其设置为Copy Never
并手动处理数据库架构更改
答案 1 :(得分:-1)
您可以尝试在C#part
中创建SQLTransaction另外,尝试更改代码,如 -
//Just create a SQL connection - cmd = new SqlCommand(conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "AddBorrower";