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

时间:2013-07-25 16:43:25

标签: c# sql sqlite ado.net sql-function

我有一个连接到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函数的工作。

1 个答案:

答案 0 :(得分:0)

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

这给我一个语法错误:

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');

真的,现在是讨论prepared statementsSQL injection的好时机。如果单独传递查询及其数据,则可以避免相当多的错误,安全问题和性能命中。

您没有提到您正在使用的特定DBI(C#有几个SQLite库),但您可以找到准备好的语句right here on Stack Overflow的相当好的解释。您可以查看您的图书馆文档,以了解有关#34;准备好的陈述和#34;或"绑定变量"。