将Integer作为字符串获取,以便将其解析为整数?

时间:2015-07-25 22:38:23

标签: c# sqlite

当我尝试从我的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
      }
}

3 个答案:

答案 0 :(得分:0)

  

我读了一些关于这可能与executeleScalar有关的事情   给回null?

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

如果你100%确定第一行第一列的返回值已经 int,你可以像它一样投射它;

int ID = (int)SendSQLExecScalar(C);

为防止此方法出现空案例,我几乎总是使用rein's generic method;

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;
    }
}

答案 1 :(得分:0)

使用TryParse而不是Parse,这允许您测试某些内容是否可解析。

如果你使用带有无效int的int.Parse(),你会在TryParse中得到一个异常,它会返回一个布尔值,让你知道解析是否成功。

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

int number = int.Parse(someString);    

int number;
int.TryParse(someString, out number);

答案 2 :(得分:0)

(int)(long)SendSQLExecScalar(C);

用这个解决,看起来像SQLite整数将返回一个长对象,我需要在将它转换为int之前解压缩。