我正在将数据加载到具有3个Entry
控件的表单中。
我为此使用的对象称为mySettings
,它是SystemSettings
的对象,SQLite
是我的var db = new SQLiteConnection(dbPath);
Entry txtServer;
txtServer = new Entry { FontSize = 10 };
controlGrid.Children.Add(txtServer, 2, 0);
Grid.SetColumnSpan(txtServer, 4);
SystemSettings mySettings;
mySettings = db.Get<SystemSettings>(0);
txtServer.Text = mySettings.FTPServer;
数据库中的类和数据库表。
到目前为止,我已经有了这段代码,它可以按原样工作。
SystemSettings
但是,在加载值之前,我需要检查SQLiteCommand cmd;
cmd = new SQLiteCommand(db);
...
int result = Convert.ToInt32(db.ExecuteScalar)
是否包含表中的任何行。
我在网上看到了一些指南。
有人说使用类似的东西
db.
但是,我在这里说错了
SQLiteCommand不包含任何包含x参数的方法
无论我传递了多少(0个或更多)。
SystemSettings
中似乎还没有方法
那么在尝试使用不存在的数据之前,如何检查[2018-08-17T17:22:00,880][WARN ][org.apache.kafka.clients.NetworkClient] [Producer clientId=%{host}] Error while fetching metadata with correlation id 211 : {etl.No Audio=INVALID_TOPIC_EXCEPTION}
[2018-08-17T17:22:05,881][WARN ][org.apache.kafka.clients.NetworkClient] [Producer clientId=%{host}] Error while fetching metadata with correlation id 212 : {etl.No Audio=INVALID_TOPIC_EXCEPTION}
[2018-08-17T17:22:10,881][WARN ][org.apache.kafka.clients.NetworkClient] [Producer clientId=%{host}] Error while fetching metadata with correlation id 213 : {etl.No Audio=INVALID_TOPIC_EXCEPTION}
[2018-08-17T17:22:15,882][WARN ][org.apache.kafka.clients.NetworkClient] [Producer clientId=%{host}] Error while fetching metadata with correlation id 214 : {etl.No Audio=INVALID_TOPIC_EXCEPTION}
[2018-08-17T17:22:20,882][WARN ][org.apache.kafka.clients.NetworkClient] [Producer clientId=%{host}] Error while fetching metadata with correlation id 215 : {etl.No Audio=INVALID_TOPIC_EXCEPTION}
[2018-08-17T17:22:25,883][WARN ][org.apache.kafka.clients.NetworkClient] [Producer clientId=%{host}] Error while fetching metadata with correlation id 216 : {etl.No Audio=INVALID_TOPIC_EXCEPTION}
是否包含任何行?
答案 0 :(得分:1)
您想要做的是获取SystemSettings
表中的第一行(如果有):
因此,您应该执行以下Sql语句(或类似方法)并检查是否返回了结果:
Select * from SystemSettings LIMIT 1;
您可以执行查询并按以下方式检查结果:
public bool DoesTableContainRows(string tableName, SQLiteConnection connection)
{
var command = new SQLiteCommand($"Select * from {tableName } LIMIT 1;", connection);
var resultReader = command.ExecuteReader();
// check whether or not a row was returned
bool containRows = resultReader.Read();
resultReader.Close();
return containRows;
}
编辑: 显示如何使用.NET和Microsoft.Data.Sqlite检查表是否包含行,包括更好地处理资源。
public bool DoesTableContainRows(string tableName, SqliteConnection connection)
{
using (var command = new SqliteCommand($"Select * from {tableName } LIMIT 1;", connection))
{
using (var resultReader = command.ExecuteReader())
{
// check whether or not a row was returned
bool containRows = resultReader.Read();
resultReader.Close();
return containRows;
}
}
}
答案 1 :(得分:1)
下面的模式应该起作用。 .ExecuteScalar()方法实际上在命令上,而不在连接上。
int count;
using (SQLiteConnection db = new SQLiteConnection("MY_CXN_STRING"))
using (SQLiteCommand cmd = new SQLiteCommand("SELECT COUNT(*) FROM SystemSettings"))
{
db.Open();
count = (int)cmd.ExecuteScalar();
db.Close();
}
bool hasRows = count != 0;
答案 2 :(得分:1)
基本上您想清除
SystemSettings
尝试仅运行对数据库不返回任何内容的查询。例如:
SystemSettings = $"SELECT * FROM TABLE_NAME WHERE COLUMN_NAME IS 'INVALID_EXPRESSIONdjeiq48724rufnjdrandom stuff'";
无论如何,这都不是最优雅的解决方案,但是它可以工作。