C#错误:将nvarchar数据类型转换为int时出错。救命!

时间:2010-10-07 04:55:33

标签: c# int nvarchar

我的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,警告同一时期的存在。 非常感谢你! :)

4 个答案:

答案 0 :(得分:0)

  1. 启动SQL事件探查器,以便捕获发送到服务器的完全 sql。
  2. 将sql复制并粘贴到查询分析器或SQL管理工作室。
  3. 运行它,最好是在调试模式下,告诉我们哪个行号有问题。
  4. 我的猜测是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

中读取参数集合中的参数