将Integer作为字符串,以便我可以将其解析为Integer

本文关键字:Integer 我可以 字符串 | 更新日期: 2023-09-27 18:04:53

当我试图从SQLite数据库中获取Integer时,我只能通过将其作为字符串读取,然后对其运行int.Parse来使其工作。这是对的吗,我读到一些关于这与ExeculeScalar可能返回null有关的内容?

这是我当前的代码SendSQLExecScalar()发送命令字符串等并返回一个对象

public object SendSQLExecScalar(string C)
{
        OpenConnection();
        SQLiteCommand SQLCommand = new SQLiteCommand(C, DbConnection);
        try
        {
            object Output = SQLCommand.ExecuteScalar();
            CloseConnection();
            return Output;
        }
        catch (Exception X)
        {
            MessageBox.Show(X.Message);
            return null;
        }
}

和:

int ID = int.Parse(SendSQLExecScalar(C).ToString());

编辑

指定的强制转换无效。

public static int GetImageID(string Path)
{
     string C = "SELECT ID FROM Images WHERE Path LIKE '" + Path + "' LIMIT 1";
     return ConvertFromDBVal<int>(SendSQLExecScalar(C));
}
public static T ConvertFromDBVal<T>(object obj)
{
      if (obj == null || obj == DBNull.Value)
      {
          return default(T);
      }
      else
      {
          return (T)obj;  //breaks here saying this cast is invalid
      }
}

将Integer作为字符串,以便我可以将其解析为Integer

我读到一些关于这可能与execuleScalar有关的内容返回null?

是的,如果sql查询没有返回任何数据,ExecuteScalar将返回null引用。

如果你100%确定第一行第一列的返回值已经是int,你可以像这样强制转换它;

int ID = (int)SendSQLExecScalar(C);

为了防止这种方法出现空情况,I几乎总是使用rein的泛型方法作为;

public static T ConvertFromDBVal<T>(object obj)
{
    if (obj == null || obj == DBNull.Value)
    {
        return default(T); // returns the default value for the type
    }
    else
    {
        return (T)obj;
    }
}

使用TryParse而不是Parse,这样可以测试某个东西是否可解析。

如果您将int.Parse((与无效的int一起使用,您将得到一个异常,而在TryParse中,它返回一个布尔值,让您知道解析是否成功。

简而言之,如果您确信该值是有效的,请使用Parse;否则使用TryParse。

int number = int.Parse(someString);    
int number;
int.TryParse(someString, out number);
(int)(long)SendSQLExecScalar(C);

解决了这个问题,看起来像SQLite integer将返回一个长对象,在将其转换为int之前,我需要对其进行解压缩。