gpt4 book ai didi

c# - System.InvalidOperationException 与 SQlBulkCopy

转载 作者:太空宇宙 更新时间:2023-11-03 16:56:03 32 4
gpt4 key购买 nike

执行批量复制时出现以下错误。

System.InvalidOperationException
The given value of type String from the data source cannot be converted to
type decimal of the specified target column.

我使用以下代码。

DataTable empTable = DataTemplate.GetEmployees();
DataRow row;
for (int i = 0; i < gv.Rows.Count;i++ )
{
row = empTable.NewRow();
string empName = gv.DataKeys[i].Values[0].ToString(); //first key
string hourSalary = gv.DataKeys[i].Values[1].ToString(); //second key
row["Emp_Name"] = empName;
row["Hour_Salary"] = Convert.ToDecimal(hourSalary);
row["Advance_amount"] = Convert.ToDecimal(0);
row["Created_Date"] = Convert.ToDateTime(System.DateTime.Now.ToString());
row["Created_By"] = Convert.ToInt64(1);
row["Is_Deleted"] = Convert.ToInt64(0);
empTable.Rows.Add(row);
}
InsertintoEmployees(empTable, "Employee");

上述字段的 SQL 数据类型是:

Emp_Name nvarchar(50) ,
Hour_Salary numeric(18, 2),
Advance_amount numeric(18, 2),
Created_Date datetime,
Created_By numeric(18, 0),
Is_Deleted numeric(18, 0)

我不知道我做错了什么。

最佳答案

您的 hourSalary 变量是一个字符串,稍后您尝试将其转换为 Decimal,但失败了。

很可能您有空字符串值或无效值。

根据您的要求,您必须决定如何处理无效值。除了失败之外,您基本上有两个选择:存储为默认值(可能是 0?)或存储为 Null 值。

如果你想存储一个默认值,那么你可以在转换工资时尝试以下方法:

string hourSalary = gv.DataKeys[i].Values[1].ToString();
double salary = 0;
if (!double.TryParse(hourSalary, out salary))
{
salary = 0; // Set your default value here
}
row["Hour_Salary"] = salary;

这将确保您获得存储在 Hour_Salary 列中的有效十进制值。

如果您想存储空值,则必须稍微更改代码:

string hourSalary = gv.DataKeys[i].Values[1].ToString();
double salary;
object salaryValue;
if (double.TryParse(hourSalary, out salary))
{
salaryValue = salary;
}
else
{
salaryValue = DBNull.Value; // Store as a null
}
row["Hour_Salary"] = salaryValue;

在此示例中,我们执行相同的 TryParse,但如果失败,我们将存储 DBNull.Value 而不是默认值 0。

关于c# - System.InvalidOperationException 与 SQlBulkCopy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2027085/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com