【问题标题】:.NET SQL Server DataAdapter returning the wrong field type?.NET SQL Server DataAdapter 返回错误的字段类型?
【发布时间】:2011-10-18 11:43:26
【问题描述】:

我正在使用面向 .Net 2.0 框架的 Visual Studio 2010,连接到 SQL Server 2008。在表中有一个名为 Box_no 的字段,类型为 varchar(50)。该字段的内容主要是数字,有些是空的。允许空值,但没有空值。

以下是查询此表并显示在网格中的代码(else 省略):

DataTable dtRaw = new DataTable();
SqlDataAdapter sdaRaw;
if (rbRestrictCount.Checked)
{
   sdaRaw = new SqlDataAdapter("Select top 50 * from MyTable where ID >= \'" + numericUpDown1.Value + "\' Order By ID",
                                                       Properties.Settings.Default.ConnStr);
};
sdaRaw.Fill(dtRaw);
dataGridView1.DataSource = dtRaw;

相当直截了当。问题在于 ID 的值(即搜索从哪里开始),box_no 字段有时以科学记数法显示 - 2.4e+.... 等 - 有时它显示为文本。它在表中明确定义为varchar,但似乎数据适配器在创建 DataTable 结构时试图推断不同的字段类型。有没有办法告诉它不要这样做?

【问题讨论】:

  • 您的 datagridview 列是自动生成的还是您手动添加的?
  • 不要像这样连接你的 sql 字符串,即使对于数字字段也是如此。有办法在你的 numericUpDown1 值中填充我想要的任何字符串,这样我就可以完全接管你的数据库。
  • 另外,您的示例看起来会抛出异常,因为未检查 rbRestrictCount。
  • 自动生成。乔尔感谢您的关心,但我知道我在做什么。
  • Joel - 正如我在最初的帖子中所说,我没有显示 else - 如果这就是所有代码,它不会引发异常 - 它不会编译。

标签: c# sql-server datatable dataadapter


【解决方案1】:

很抱歉,但已发现问题 - 科学记数法实际上存在于数据本身中 - 它是从 XLS 电子表格导入的,似乎导致 700K 记录中的 69K 出现此问题。谢谢

【讨论】:

    【解决方案2】:

    在将其分配给数据源之前尝试此操作

    dtRaw.Columns["box_no"].DataType = typeof(string);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-31
      相关资源
      最近更新 更多