我在文本框中输入了一些值,并希望将这些值保存到我的sql db中。现在我只想在MessageBox中显示我的SQL StoredProcedure的返回值,以显示插入是否成功。
提交按钮代码:
private void btnAdd_Click(object sender, RoutedEventArgs e)
{
if (txtType.Text.Length > 0 && txtNumber.Text.Length > 0 && txtLine1.Text.Length > 0)
{
string sOut = "";
DataManager.SaveAddendum(txtType.Text, txtNumber.Text, txtLine1.Text, txtLine2.Text, txtLine3.Text, txtLine4.Text, sOut);
MessageBox.Show(sOut);
}
}
提交按钮调用的数据管理类:
public static void SaveAddendum(string sType, string sNumber, string sLine1, string sLine2, string sLine3, string sLine4, string sOut)
{
// Create connection
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConString"].ToString());
// Create command
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "sp_Insert_Addendum";
// Create and add input parameters
cmd.Parameters.AddWithValue("@Type", sType);
cmd.Parameters.AddWithValue("@Number", sNumber);
cmd.Parameters.AddWithValue("@Line1", sLine1);
cmd.Parameters.AddWithValue("@Line2", sLine2);
cmd.Parameters.AddWithValue("@Line3", sLine3);
cmd.Parameters.AddWithValue("@Line4", sLine4);
// Attach connection to command
cmd.Connection = con;
// Open connection
con.Open();
// Execute command
//cmd.ExecuteNonQuery();
sOut = cmd.ExecuteScalar().ToString();
// Close connection
con.Close();
// Dispose connection
con.Dispose();
}
存储过程:
ALTER PROCEDURE [dbo].[sp_Insert_Addendum]
-- Add the parameters for the stored procedure here
@Type varchar(3),
@Number varchar(4),
@Line1 varchar(60),
@Line2 varchar(60),
@Line3 varchar(60),
@Line4 varchar(60)
AS
BEGIN
SET NOCOUNT ON;
BEGIN
IF EXISTS(SELECT Addendum_Type, Addendum_Number FROM AddendumMst WHERE Addendum_Type = @Type AND Addendum_Number = @Number)
BEGIN
--PRINT N'The addendum already exists.
SELECT 'Already Exists'
END
ELSE
BEGIN
INSERT INTO AddendumMst (Addendum_Type, Addendum_Number, Line1, Line2, Line3, Line4) VALUES (@Type, @Number, @Line1, @Line2, @Line3, @Line4)
IF @@ERROR <> 0
BEGIN
--PRINT N'An error occurred inserting the addendum information.';
SELECT 'Error inserting'
END
ELSE
BEGIN
--PRINT N'The addendum has been inserted.';
SELECT 'Success'
END;
END
END
END
我的问题 - 消息框显示空白。
答案 0 :(得分:4)
你是SaveAddendum
mthod没有返回值。 sOut
是方法的本地。更改方法以返回值(字符串),然后您可以在MessageBox中显示它。此外,您可以删除sOut,因为不需要(除非您将其声明为out
参数,否则不会按照您的想法执行操作):
public static string SaveAddendum(string sType, string sNumber, string sLine1, string sLine2, string sLine3, string sLine4)
{
// Your code
return sOut;
}
然后当你调用方法时,你可以这样做:
string sOut = DataManager.SaveAddendum(txtType.Text, txtNumber.Text, txtLine1.Text, txtLine2.Text, txtLine3.Text, txtLine4.Text);
MessageBox.Show(sOut);
答案 1 :(得分:3)
您应该将sOut
参数声明为输出参数:
public static void SaveAddendum(string sType, string sNumber, string sLine1, string sLine2, string sLine3, string sLine4, out string sOut)
并将其称为:
DataManager.SaveAddendum(txtType.Text, txtNumber.Text, txtLine1.Text, txtLine2.Text, txtLine3.Text, txtLine4.Text, out sOut);
与此问题无关,我还建议使用using
来处理连接的关闭:
using(SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConString"].ToString())) {
// . . . code
}
}
取代
con.Close();
con.Dispose();
代码更短,即使存在异常,也可以保证连接正确关闭。
答案 2 :(得分:0)
我认为您应该使用“ref”在SaveAddendum过程中标记参数sOut。否则方法不知道它应该返回分配给此参数的值。 但更好的设计是从SaveAddendum返回此参数,而不是让它返回void。