将字符串转换为int,用于SQL数据库调用

本文关键字:用于 SQL 数据库 调用 int 字符串 转换 | 更新日期: 2023-09-27 18:15:03

我正试图执行一个SQL select语句来检索我的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的其他类型,但也没有成功。提前感谢您的帮助。

将字符串转换为int,用于SQL数据库调用

由于某种原因,您要获取值,然后丢弃它,然后尝试将字符串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来获得单个值。你目前的做法非常复杂。

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

您正在尝试共同转换为int字符串"CurData">

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

试试这个;

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

您正试图将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);

您正在尝试将基元字符串类型转换为Int。因此,这与您的逻辑有关。

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

注意:如果您打算使用Identity(递增字段(,则我建议不要显式创建递增字段,例如Identity列。试着使用为您生成数据库的内置功能。在谷歌上搜索如何在SQL或您喜欢的数据库中定义AUTO INCREMENT字段。