C# 如何在asp.net的过程或函数中设置参数错误
因此,我在这里创建一个使用sql server数据库连接的web应用程序,这里有一个存储过程:C# 如何在asp.net的过程或函数中设置参数错误,c#,sql-server,stored-procedures,ado.net,C#,Sql Server,Stored Procedures,Ado.net,因此,我在这里创建一个使用sql server数据库连接的web应用程序,这里有一个存储过程: ALTER PROC [dbo].[spMSTransaction_Insert] @OrgID int, @SiteID int, @TransactionCategoryID int, @TransactionDesc varchar(300), @IsActive bit, @CreatedDate datetime, @CreatedB
ALTER PROC [dbo].[spMSTransaction_Insert]
@OrgID int,
@SiteID int,
@TransactionCategoryID int,
@TransactionDesc varchar(300),
@IsActive bit,
@CreatedDate datetime,
@CreatedBy varchar(50),
@ModifiedDate datetime,
@ModifiedBy varchar(50)
AS
SET NOCOUNT ON
SET XACT_ABORT ON
BEGIN TRAN
INSERT INTO [dbo].[MSTransaction]
(
[OrgID],
[SiteID],
[TransactionCategoryID],
[TransactionDesc],
[IsActive],
[CreatedDate],
[CreatedBy],
[ModifiedDate],
[ModifiedBy]
)
SELECT @OrgID,
@SiteID,
@TransactionCategoryID,
@TransactionDesc,
@IsActive,
@CreatedDate,
@CreatedBy,
@ModifiedDate,
@ModifiedBy
COMMIT
在后面的代码中,我有这样一个:
protected void btnSave_Click(object sender, EventArgs e)
{
logID = Helper.GetLogID();
try
{
LKLog.Write(logID, "Transaction.aspx.cs", "btnSave_Click", "Start Method", string.Empty, Helper.GetUserName());
orgID = 1;
siteID = 1;
if (string.IsNullOrEmpty(hfOrgID.Value))
{
clsTransaction.InsertTransaction(Helper.LogID, Helper.OrgID, Helper.SiteID,
CommonFunctions.StringToInt(ddlTransactionCategory.SelectedValue), txtTransactionDesc.Text, true);
}
else
{
int transactionID = CommonFunctions.StringToInt(hfOrgID.Value);
clsTransaction.UpdateTransaction(logID, orgID, siteID, 1,
CommonFunctions.StringToInt(ddlTransactionCategory.SelectedValue), txtTransactionDesc.Text, true);
}
string message = string.Format(Constants.SaveMessage, "Transaction");
LKLog.Write(logID, "Transaction.aspx.cs", "btnSave_Click", "End Method", string.Empty, Helper.GetUserName());
ScriptManager.RegisterStartupScript(this, this.GetType(), "Info", "alert('" + message + "');window.location ='Transaction.aspx';", true);
}
catch (Exception ex)
{
LKLog.Write(logID, "Transaction.aspx.cs", "btnSave_Click", ex.StackTrace, ex.Message, Helper.GetUserName());
throw;
}
}
课程安排如下:
public static void InsertTransaction(decimal logID, int orgID, int siteID, int TransactionCategoryID, string TransactionDesc, bool isActive)
{
LKLog.Write(logID, "clsTransaction.cs", "InsertTransaction", "Start Method", string.Empty, Helper.GetUserName());
using (SqlConnection conn = new SqlConnection(CommonFunctions.GetAppDBConnection(Constants.AppID, Constants.TMDDBConnection)))
{
try
{
conn.Open();
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = "spMSTransaction_Insert";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("orgID", orgID));
cmd.Parameters.Add(new SqlParameter("siteID", siteID));
cmd.Parameters.Add(new SqlParameter("TransactionCategoryID", TransactionCategoryID));
cmd.Parameters.Add(new SqlParameter("TransactionDesc", TransactionDesc));
cmd.Parameters.Add(new SqlParameter("IsActive", siteID));
cmd.Parameters.Add(new SqlParameter("Username", Helper.GetUserName()));
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
LKLog.Write(logID, "clsTransaction.cs", "InsertTransaction", ex.StackTrace, ex.Message, Helper.GetUserName());
throw;
}
finally
{
conn.Close();
}
}
LKLog.Write(logID, "clsTransaction.cs", "InsertTransaction", "End Method", string.Empty, Helper.GetUserName());
}
但当我试图插入数据时,错误指向
过程或函数“spMSTransaction_Insert”需要未提供的参数“@CreatedDate”
错误行为(第73行标记为红色):
我很困惑,到底是什么错误,有没有关于我这里缺少什么的建议?错误消息告诉您缺少存储过程的一个参数,具体来说
@CreatedDate
您需要添加:
cmd.Parameters.Add(new SqlParameter("CreatedDate", DateTime.Now));
注意:您必须提供丢失的所有其他参数,否则将遇到相同的错误 异常文本非常清楚: 过程或函数“spMSTransaction\u Insert”需要参数“@CreatedDate”,该参数未提供 存储过程需要这些您没有提供的参数
@CreatedDate datetime,
@CreatedBy varchar(50),
@ModifiedDate datetime,
@ModifiedBy varchar(50)
…您正在传递一个它不期望的参数
cmd.Parameters.Add(new SqlParameter("Username", Helper.GetUserName()));
问题就在于错误到底说了什么。必须向cmd提供所有程序参数。+1。你说的正是它缺少的东西。:)我希望我能给你们两个答案,但既然@DarrenDavies先回答了,我就投他的票,谢谢sir@kostasch-是的,但是我要从错误消息的状态开始。希望这将引导他们朝着正确的方向前进,这样他就可以自己提供其他论点。你说得对:)。但是@AdamMaras的答案完全解决了问题。因此,我认为必须比你的答案:)更多,这是绝对正确的。我希望我能给你们两个答案,但既然@DarrenDavies先回答了,我就投你一票,先生
cmd.Parameters.Add(new SqlParameter("Username", Helper.GetUserName()));