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)。知道如何纠正吗?

SqlDataAdapter.Fill使用了错误的字段类型

就我而言,我不明白为什么这会有什么不同,但在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);
// ...