使用C#和ADO.NET在SQLite中存储IP地址

本文关键字:存储 IP 地址 SQLite ADO NET 使用 | 更新日期: 2023-09-27 18:24:52

我有一个数据库客户端,它将连接到MySQL数据库。与MySQL Workbench非常相似,我有一个存储连接凭据的系统,以便以后可以调用它们。我正在C#中自己实现这个功能。

我有一个WPF表格,里面会输入这些详细信息。其中一个控件接收IP地址,我想将其存储在SQLite3数据库文件中。问题是,当我从表单中放入txtHostname.Text并将其存储在表中(特定列是文本类型列)时,它会在IP地址的数字之间跳到"."。

假设我使用的是127.0.0.1。数据库将存储多达127个,遇到".0",并在C#中抛出一个错误。这当然是个问题。

以下是我用来创建.db文件并创建一个表来保存信息的代码:

    private void btnOK_Click(object sender, RoutedEventArgs e)
    {
        string fileName = txtConnectionName.Text + ".db";
        SQLiteConnection conn = CreateConnectionForSchemaCreation(fileName);
        using (SQLiteCommand cmd = new SQLiteCommand(conn))
        {
            cmd.CommandText = "CREATE TABLE Server_Details(ConnectionName TEXT PRIMARY KEY, Hostname TEXT NOT NULL, Username TEXT NOT NULL, Password TEXT NOT NULL, DefaultSchema TEXT NOT NULL)";
            cmd.ExecuteNonQuery();
            cmd.CommandText = String.Format("INSERT INTO Server_Details(ConnectionName,Hostname,Username,Password,DefaultSchema) VALUES({0},{1},{2},{3},{4})", txtConnectionName.Text, txtHostname.Text, txtUsername.Text, pwdPassword.Password, txtDefaultSchema.Text);
            cmd.ExecuteNonQuery();
        }
        conn.Close();
    }

我实际上更像是一个开发人员,而不是数据库分析师,所以我在这里有点困惑。我宁愿使用SQLite数据库来保存这些信息——它比解析.txt文件容易得多——但似乎SQLite中没有本地保存IP地址的数据类型。我知道我可能会写一个函数来实现这一点,但我已经有一段时间没有做任何SQL函数了。

使用C#和ADO.NET在SQLite中存储IP地址

如果引用变量,它们将被视为文字值。

这给了我一个语法错误:

INSERT INTO Server_Details VALUES (Google, google.com, foo, bar, 127.0.0.1);

这执行得很好:

INSERT INTO Server_Details VALUES ('Google', 'google.com', 'foo', 'bar', '127.0.0.1');

实际上不过,现在是讨论准备好的语句和SQL注入的好时机。如果分别传递查询及其数据,可以避免相当多的错误、安全问题和性能问题。

您没有提到您正在使用哪个特定的DBI(C#有几个SQLite库),但您可以在Stack Overflow上找到对准备好的语句的很好的解释。您可以查看库的文档中是否有"准备好的语句"或"绑定变量"的提及。