我的c#应用程序非常困难。每次运行下面的代码时,它都会给我一个关于将nvarchar数据类型转换为int的错误。我尝试过铸造,但似乎不起作用。
ConnectionString myConnString = new ConnectionString();
string connString = myConnString.getConnectionString();
SqlConnection connValidate = new SqlConnection(connString);
SqlCommand cmdValidate = new SqlCommand("XXX", connValidate);
cmdValidate.CommandType = CommandType.StoredProcedure;
cmdValidate.Parameters.Add(new SqlParameter("@AccountID", currentUser));
cmdValidate.Parameters.Add(new SqlParameter("@PeriodMonth", Convert.ToString(comboBoxMonth.SelectedItem).Trim().ToUpper()));
cmdValidate.Parameters.Add(new SqlParameter("@PeriodYear", Convert.ToInt32(comboBoxYear.SelectedValue)));
connValidate.Open();
Int32 result = Convert.ToInt32(cmdValidate.ExecuteScalar());
connValidate.Dispose();
connValidate.Close();
这是我使用的存储程序:
ALTER PROCEDURE [dbo].[XXX]
@AccountID char(6),
@PeriodMonth char(10),
@PeriodYear int,
@Date int,
@PeriodID int,
@InventoryID int,
@ProductOutID int
AS
SELECT @PeriodID = PeriodID FROM Periods
WHERE PeriodMonth = @PeriodMonth AND PeriodYear = @PeriodYear AND AccountID = @AccountID
SELECT @InventoryID = InventoryID FROM Fact
WHERE PeriodID = @PeriodID AND AccountID = @AccountID
SELECT @ProductOutID = ProductOutID FROM Inventory
WHERE InventoryID = @InventoryID
SELECT DailyOutID FROM DailyOut
WHERE ProductOutID = @ProductOutID AND Date = @Date
RETURN
我想在这里做的是检查用户输入的同一月份和年份的时段是否已存在于数据库中。所以基本上,如果输入的句点已经存在,则存储过程应该返回一个值,如果存在,那么将向用户显示MessageBox
,警告同一时期的存在。
非常感谢你! :)
答案 0 :(得分:0)
我的猜测是Periods.PeriodMonth不是char(10),但我需要查看错误在哪一行。
答案 1 :(得分:0)
试试这个:
Int32 result = Int32.Parse(cmdValidate.ExecuteScalar());
答案 2 :(得分:0)
首先,验证cmdValidate.ExecuteScalar()是否返回您认为的值。我猜这个问题存在于你的存储过程中。如果是这样,您可能希望发布包含不同标签的新问题。
答案 3 :(得分:0)
尝试使用像@DailyOutID
这样的out参数SELECT @DailyOutID = Cast(DailyOutID As Int) FROM DailyOut
WHERE ProductOutID = @ProductOutID AND Date = @Date
从cmdValidate.Parameters
中读取参数集合中的参数