SqlDataAdapter.Fill使用了错误的字段类型
本文关键字:字段 类型 错误 Fill SqlDataAdapter | 更新日期: 2023-09-27 18:29:00
由于某些原因,SqlDataAdapter.Fill()
方法将其中一个数据库字段视为System.Decimal
,即使它在数据库中定义为varchar(8)
。
string employeeSelectQuery = @"SELECT Employee_ID, Department, Email, Emp_Type,'
First_Name, Job_Title, Last_Name, LogonID, Middle_Name, Display_Name, '
SupervisorID FROM vw_tblEmployees;";
// ...
using( DataTable employeeTable = new DataTable() )
using( SqlDataAdapter sqlAdapter = new SqlDataAdapter(employeeSelectQuery,
ConfigurationManager.ConnectionStrings["EMPLOYEE_DB"].ConnectionString) )
{
sqlAdapter.Fill(employeeTable);
Debug.WriteLine(String.Format("LogonID Data Type = {0}",
employeeTable.Columns["LogonID"].DataType));
// ...
}
此输出
LogonID数据类型=System.Decimal
同样,在数据库中,LogonID
字段是varchar(8)
。知道如何纠正吗?
就我而言,我不明白为什么这会有什么不同,但在SELECT
语句中有一个换行符似乎是造成这种情况的原因。如果我删除换行符,它将正确地检测类型为System.String
。
string employeeSelectQuery = @"SELECT Employee_ID, Department, Email, Emp_Type, First_Name, Job_Title, Last_Name, LogonID, Middle_Name, Display_Name, SupervisorID FROM vw_tblEmployees;";
另一个似乎有效的选项是在调用Fill()
之前设置DataTable
中的字段。
employeeTable.Columns.Add("Employee_ID", typeof(string));
employeeTable.Columns.Add("LogonID", typeof(string));
// ...
sqlAdapter.Fill(employeeTable);
// ...