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