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

时间:2014-11-03 04:01:56

标签: c# sql sql-server sqldataadapter

出于某种原因,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)。知道怎么纠正这个吗?

1 个答案:

答案 0 :(得分:0)

对于我的生活,我不明白为什么这会有所不同,但在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;";

另一个似乎有用的选项是在调用DataTable之前设置Fill()中的字段。

employeeTable.Columns.Add("Employee_ID", typeof(string));
employeeTable.Columns.Add("LogonID", typeof(string));
// ...
sqlAdapter.Fill(employeeTable);
// ...