【发布时间】:2020-06-18 09:23:51
【问题描述】:
我有这段代码可以将数据保存到数据库
for (int i = 0; i < dt.Rows.Count; i++)
{
var row = dt.Rows[i];
await stock.AddProjectNeedsBoltsTest(Convert.ToInt32(row["Quantité"]),
(int?)row["Filetage"],
Convert.ToInt32(row["idProject"]),
(int?)row["idCategory"],
(int?)row["idType"]).ConfigureAwait(true);
}
这是 AddProjectNeedsBoltsTest 背后的代码
public async Task AddProjectNeedsBoltsTest(int Quantity, int? Filetage, int IdProject, int? IdCategory, int? IdType)
{
DAL.DataAccessLayer DAL = new DAL.DataAccessLayer();
await Task.Run(() => DAL.Open()).ConfigureAwait(false);
SqlParameter[] param = new SqlParameter[5];
param[0] = new SqlParameter("@Quantity", SqlDbType.Int)
{
Value = Quantity
};
param[1] = new SqlParameter("@Filetage", SqlDbType.Int)
{
Value = Filetage.HasValue ? Filetage : (object)DBNull.Value
};
param[2] = new SqlParameter("@IdProject", SqlDbType.Int)
{
Value = IdProject
};
param[3] = new SqlParameter("@IdCategory", SqlDbType.Int)
{
Value = IdCategory.HasValue ? IdCategory : (object)DBNull.Value
};
param[4] = new SqlParameter("@IdType", SqlDbType.Int)
{
Value = IdType.HasValue ? IdType : (object)DBNull.Value
};
await Task.Run(() => DAL.ExcuteCommande("AddProjectNeedsBoltsTest", param)).ConfigureAwait(false);
DAL.Close();
}
这是我的存储过程
CREATE PROCEDURE dbo.AddProjectNeedsBoltsTest
@Quantity int
,@Filetage int
,@IdProject int
,@IdCategory int
,@IdType int
AS
INSERT INTO [dbo].[ProjectNeedsBolts]
([Quantity]
,[Filetage]
,[IdProject]
,[IdCategory]
,[IdType])
VALUES
(@Quantity
,@Filetage
,@IdProject
,@IdCategory
,@IdType)
现在当我点击保存按钮时出现此错误
Smart Industrial Management.exe 中出现“System.InvalidCastException”类型的异常,但未在用户代码中处理 附加信息:指定的演员表无效。
关于这行代码的调试
(int?)row["Filetage"]
我收到此错误消息
无法将 'row["Filetage"]' 拆箱为 'int?'
更新:这是我的数据表
DataTable dt = new DataTable();
void CreateDataTable()
{
dt.Columns.Add("Quantité");
dt.Columns.Add("Filetage");
dt.Columns.Add("idProject");
dt.Columns.Add("idCategory");
dt.Columns.Add("idType");
gridControl1.DataSource = dt;
}
如果我尝试使用
dt.Columns.Add("Filetage", typeof(int?));
我收到错误消息
DataSet 不支持 System.Nullable
【问题讨论】:
-
那么...
row["Filetage"]中有什么内容 -
@TheGeneral 它可以保存 int 值或 null
-
这是假设,你检查过值吗?
-
明确:
row["Filetage"].GetType().FullName是什么? -
@M.Bouabdallah 好吧,是的;您不能将
string转换为int?- 在我看来,您的数据库架构非常错误 - 如果它代表int,则该列应该是int;如果你不能改变它,你将不得不期待字符串,并进行自己的格式化(记住考虑数据存储在什么文化中,这可能与运行机器上的文化不同,或者数据库服务器的文化)
标签: c# sql-server winforms