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

C# SqlDataAdapter.Fill使用了错误的字段类型,c#,sql,sql-server,sqldataadapter,C#,Sql,Sql Server,Sqldataadapter,出于某种原因,SqlDataAdapter.Fill()方法将其中一个数据库字段视为System.Decimal,即使它在数据库中定义为varchar(8) 这个输出 LogonID数据类型=System.Decimal 同样,在数据库中,LogonID字段是一个varchar(8)。你知道怎么纠正吗 就我的一生而言,我不明白为什么这会造成不同,但在SELECT语句中有一个新行字符似乎是导致这种情况的原因。如果删除新行字符,它将正确检测类型为System.String string employ

出于某种原因,
SqlDataAdapter.Fill()
方法将其中一个数据库字段视为
System.Decimal
,即使它在数据库中定义为
varchar(8)

这个输出

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
中的字段


您可能希望提供正在执行的实际SQL(
employeeSelectQuery
),我看到SQL正在查询视图。你能不能也提供视图定义,这样我们就可以看到那里发生了什么?@TroyGizzi,不。现在不行,因为我只有select权限。我可以告诉你,它不应该超过
选择LogonID。。。来自Term_Date为NULL或Term_Date>GETDATE()的tblEmployees
我还可以告诉您
从信息模式中选择数据类型。表名如“vw\u tblEmployees”和列名如“LogonID”的列
返回
varchar
通过调试检查数据集中的数据。如果它将显示小数点值,则使用sql查询中的函数删除小数点。什么是
\
新行中显示的字符?它们是否存在于您的实际代码中,或者您是否将它们用于此网站?您可以连接多个字符串以消除滚动。@DStanley,True。我也可以做
.Replace(“\r\n”,”)
,但我真的很想了解这是为什么。这几乎足以让我停止使用黑盒,即
SqlDataAdapter
@DStanley,它还找到了另一个(更好的)解决方案。
string employeeSelectQuery = @"SELECT Employee_ID, Department, Email, Emp_Type, First_Name, Job_Title, Last_Name, LogonID, Middle_Name, Display_Name, SupervisorID FROM vw_tblEmployees;";
employeeTable.Columns.Add("Employee_ID", typeof(string));
employeeTable.Columns.Add("LogonID", typeof(string));
// ...
sqlAdapter.Fill(employeeTable);
// ...