【问题标题】:Converting a string to int, for a SQL Database call将字符串转换为 int,用于 SQL 数据库调用
【发布时间】:2013-05-17 16:54:02
【问题描述】:

我正在尝试执行 SQL 选择语句来检索我的 id,然后增加 id。我可以从数据库中选择就好了。但是当我尝试将字符串转换为 int 时,我得到了格式异常的错误被捕获

输入字符串的格式不正确。

这是我的代码:

var sql = new SQL_Statements();
var string_sql_id ="";
var string_sql_select = "select * from is_inventory where id =(select max(id) from is_inventory)";

var sql_ds = sql.SelectFromDB(string_sql_select);

int DataIndex;

if (sql_ds.Tables["CurData"].Rows.Count > 0)
   for (DataIndex = 0; DataIndex <= sql_ds.Tables["CurData"].Rows.Count - 1; DataIndex++)
   {
       (sql_ds.Tables["CurData"].Rows[DataIndex]["id"]).ToString();
       string_sql_id ="CurData";
       var int_sql_id = Convert.ToInt32(string_sql_id);
       ++int_sql_id;
   }

代码的倒数第二行是引发异常的地方。我曾尝试将转换更改为其他类型,例如 double,但这也不起作用。提前感谢您的帮助。

【问题讨论】:

  • 你使用了太多的变量,我什至不知道你在做什么。可以加一些 cmets 吗?
  • 你需要存储 (sql_ds.Tables["CurData"].Rows[DataIndex]["id"]).ToString(); 的结果在局部变量中
  • 在你所有的变量前面加上它们的类型真的会激怒下一个阅读你代码的开发者。

标签: c# type-conversion conventions sql


【解决方案1】:

您正在尝试将string“CurData”转换为引发异常的整数。

 string_sql_id ="CurData";
 var int_sql_id = Convert.ToInt32(string_sql_id);

我假设您的意思是将string_sql_id 分配给Row ID

 string_sql_id = sql_ds.Tables["CurData"].Rows[DataIndex]["id"]).ToString();

然后你可以尝试转换:

 var int_sql_id = Convert.ToInt32(string_sql_id);

【讨论】:

    【解决方案2】:

    在转换行之前的行中,设置string_sql_id ="CurData";。 "CurData" 不是整数,尝试将其转换为 1 是行不通的。

    试试这个;

    string_sql_id = (sql_ds.Tables["CurData"].Rows[DataIndex]["id"]).ToString();
    

    【讨论】:

    • 在这种情况下,您很可能检索到错误的数据,或者检索不正确。此语句返回什么,EXACTLY(sql_ds.Tables["CurData"].Rows[DataIndex]["id"]).ToString()?
    • 我替换了 string_sql_id ="CurData"; with string_sql_id = (sql_ds.Tables["CurData"].Rows[DataIndex]["id"]).ToString();
    • 看起来您仍然在这里进行了一些冗余转换 - “CurData”的“id”字段实际上是作为 int 存储在返回的 DataSet 中的吗?如果是这样,它应该能够转换为 int。如果“id”可以返回 null,那么您需要先检查 DBNull。
    【解决方案3】:

    由于某种原因,您正在获取值然后丢弃它,然后尝试将字符串 CurData 转换为 int。

    (sql_ds.Tables["CurData"].Rows[DataIndex]["id"]).ToString();
    string_sql_id ="CurData";
    var int_sql_id = Convert.ToInt32(string_sql_id);
    

    string_sql_id 的值总是只是CurData - 你怎么期望它是别的?

    数据表中的值应该已经是一个整数,所以你不需要任何解析:

    var id = (int) sql_ds.Tables["CurData"].Rows[DataIndex]["id"];
    

    (您可能发现它是 long 而不是 int - 这取决于您的字段类型。)

    您应该尽可能避免不必要的字符串转换。在这种情况下,根本不清楚您为什么要使用DataTable。您可以只使用 DataReader - 如果您将代码更改为只选择最大 ID,则可以使用 ExecuteScalar 来获取单个值。您当前的方法非常复杂。

    【讨论】:

    • 老实说,我比我更喜欢你的回答 :(.lol.
    【解决方案4】:
    string_sql_id ="CurData";
    var int_sql_id = Convert.ToInt32(string_sql_id);
    

    您正在尝试 co 转换为 int 字符串“CurData”

    【讨论】:

    • 很惊讶这比乔恩的回答有更多的赞成票 - 特别是当没有关于如何解决问题的进一步解释时。
    【解决方案5】:

    您正在尝试将原始字符串类型转换为 Int。所以这与你的逻辑有关。

    string_sql_id ="CurData";
    var int_sql_id = Convert.ToInt32(string_sql_id);
    

    注意:如果您打算使用 Identity(增量字段),那么我建议不要显式创建增量字段,例如 Identity 列。尝试使用为您生成它的数据库内置功能。谷歌了解如何在 SQL 或您喜欢的数据库中定义 AUTO INCREMENT 字段。

    【讨论】:

      猜你喜欢
      • 2013-08-04
      • 1970-01-01
      • 1970-01-01
      • 2018-10-31
      • 1970-01-01
      • 2010-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多