C#/Sqlite 将查询结果存储为变量的简单方法

Posted

技术标签:

【中文标题】C#/Sqlite 将查询结果存储为变量的简单方法【英文标题】:C# / Sqlite simple way to store query result as variable 【发布时间】:2012-09-07 10:17:43 【问题描述】:

我是 C# 的半新手,但特别是在 C# 中使用 Sqlite,目前我有一个 SQlite DB 设置很好,因为它可以很好地与应用程序连接我正在运行 Windows 窗体应用程序,并且我已经在数据库中绑定了一个表到数据网格视图。

这一切都很好,我有一个函数设置来运行查询,我将 SQL 语句作为字符串传递给函数,然后它作为查询运行。

我在徘徊如何从我知道的查询中得到结果,显然它会是这样的

private string QueryResult(string query)
    connect
    run query
    read query 
    return result

我见过的所有示例都使用 Sqlreader,但我似乎无法让它工作,我真的习惯于将 php 与 SQL 一起使用,这似乎比在 C# 中使用它简单得多,谁能解释或指出我的某个地方可能能够找到一个教程或函数,您可以通过将其作为字符串传递并非常简单地返回结果来运行任何查询?我需要的结果不会是数组或巨大的东西,我只想一次返回 1 个单词的字符串或数字,所以我不需要任何复杂的东西。

请帮帮我,我昨晚花了大约 4 个小时阅读这些东西,但似乎没有得到任何结果。

【问题讨论】:

你在使用 DataContext 吗?还是 ADO.NET?您的数据在 DataTable 中吗? 【参考方案1】:

试试这个,也许对你有帮助:

public string QueryResult(string query)

    string result = "";
    SQLiteConnection sqlite = new SQLiteConnection("Data Source=/path/to/file.db");
    try
    
        sqlite.Open();  //Initiate connection to the db
        SQLiteCommand cmd = sqlite.CreateCommand();
        cmd.CommandText = query;  //set the passed query
        result = cmd.ExecuteScalar().ToString();
    
    finally
    
        sqlite.Close();
    
    return result;

【讨论】:

我回家后也会试试这个,这看起来是最简单的一个,如果它有效,可能最终会使用它,直到实现更优雅的东西。 哇...这几乎是复制和粘贴,它起作用了无论如何,我现在将使用它,因为它有效我想让 Derek 的方法工作,因为它看起来更有趣,但非常感谢。【参考方案2】:

这是我用过的一种方法....

首先,构建一个类来表示数据库中的表:-

public class Contact
    
        public int ContactID  get; set; 
        public string Surname  get; set; 
        public string Forename  get; set; 
        public string MobileNumber  get; set; 
        public string EmailAddress  get; set; 
        public string Information  get; set;    
    

然后我将此数据加载到 IEnumerable 列表中:-

public List<Contact> GetContacts()
        
            DataTable dt = new DataTable();

            OleDbCommand cmd = new OleDbCommand("SELECT * FROM [Contacts]", Connection);
            Adapter.SelectCommand = cmd;

            Connection.Open();
            Adapter.SelectCommand.ExecuteNonQuery();
            Adapter.Fill(dt);
            Connection.Close();

            var Contacts = (from row in dt.AsEnumerable()

                            select new Contact
                            
                                ContactID = row.Field<int>("ContactID"),
                                Surname = row.Field<string>("Surname"),
                                Forename = row.Field<string>("Forename"),
                                MobileNumber = row.Field<string>("MobileNumber"),
                                EmailAddress = row.Field<string>("EmailAddress"),
                                Information = row.Field<string>("Information")

                            ).ToList();



            return Contacts;
        

在我的应用程序中,我创建了这个对象的一个​​实例:-

   public List<Contact> contactData;
   contactData = dc.GetContacts();

我现在可以使用 LINQ 操作数据了:-

var Query = ConactData.Where(item=> item.ContactID == 10)
            .Select(item=> item.Surname).toString(); 

您可以使用 LINQ 查询您的数据并将其存储为列表、字符串等。

希望这会有所帮助。

【讨论】:

非常感谢,我曾想过为此创建一个类,但我没有这样做的经验,当我第一次尝试使用 XML 时,它略有不同,但这看起来与我所做的完全一样需要我今晚回家时测试一下谢谢! 我自己对它很陌生,不过使用 LINQ 非常棒,你很快就会上手。 是的,这看起来比我最初想到的更优雅的解决方案,所以学习这个可能比只使用更简单的东西更好。今晚我会测试一下刚才卡在工作中的:( 这很令人困惑,我将其转换为与 SQLite 一起使用,适配器位给我带来了问题,您是否在某处声明了这个? 是的,伙计,我做了,查找数据适配器,我不在工作,所以手头没有编码......对不起。【参考方案3】:

通常,我会这样做:

string CONNECTION_STRING = "Persist Security Info=False; Integrated Security = SSPI; Initial Catalog=DATABASENAME;Data Source=SERVERIP";

string query = "IF OBJECT_ID('TABLE_NAME') IS NOT NULL SELECT * FROM TABLE_NAME";

using (SqlConnection Connection = new SqlConnection(CONNECTION_STRING))

    using (SqlCommand sqlCommand = new SqlCommand(query, ConnectionString))
    
        try
        
            Connection.Open();
            SqlDataReader queryCommandReader = sqlCommand.ExecuteReader();
            DataTable dataTable = new DataTable();
            dataTable.Load(queryCommandReader);

            if (dataTable != null)
            
                 if (dataTable.Rows != null)
                 
                     if (dataTable.Rows.Count > 0)
                     
                         String rowText = "";
                         rowText += dataTable.Rows[ROW_NUM] [COLUMN_NAME];                          
                     
                 
            
        
        catch (Exception)
        
            ...
        
        finally
        
               ...
        

【讨论】:

【参考方案4】:

//在正常逻辑中

SELECT (SELECT SUM(column_name) FROM table_name WHERE condition) - (SELECT SUM(column_name) FROM table_name WHERE condition)

//实际编码示例

public void total_due()
                
                    string query = "select (select sum(amount) from table_name where id>0 and amount>paid and [order no] like '" + textbox1.Text + "%' and [name] like '" + textbox2.Text + "%' and [date] like '" + textbox3.Text + "%' ) - (select sum(paid) from table_name where id>0 and amount>paid and [order no] like '" + textbox1.Text + "%' and [name] like '" + textbox2.Text + "%' and [date] like '" + textbox3.Text + "%' )";
                    SqlConnection con = new SqlConnection("server=server_name;Database=database_name;UID=sa;Password=password;");
                    con.Open();
                    SqlCommand cmd = new SqlCommand(query,con);
                    due.Text = cmd.ExecuteScalar().ToString();
                    con.Close();
                

【讨论】:

感谢发布此示例。 您可以使用 String.Format 让生活更轻松

以上是关于C#/Sqlite 将查询结果存储为变量的简单方法的主要内容,如果未能解决你的问题,请参考以下文章

sqlite 能存储数组和集合吗

SQLite INSERT SELECT 查询结果到现有表中?

查询结果设置为变量 - powershell

在 azure synapse 存储过程中将表名作为参数传递时将查询结果分配给变量

无法将 SQLite 查询结果导出为 JSON?

在同一个db上同时使用基于核心数据和sqlite c的api