将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
}
}
我读到一些关于这可能与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之前,我需要对其进行解压缩。