Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 数据库查询执行_C#_Database_Sqlite - Fatal编程技术网

C# 数据库查询执行

C# 数据库查询执行,c#,database,sqlite,C#,Database,Sqlite,我在C#中有一个应用程序,数据库是sqlite(.db3)。我有两个函数 String sConnectionString = "Data Source=mydb.db3;Version=3;Password=123456;"; private void longitudinalProfileToolStripMenuItem_Click(object sender, EventArgs e) { saveProject(iProjectID); computeArea(iPro

我在C#中有一个应用程序,数据库是sqlite(.db3)。我有两个函数

String sConnectionString = "Data Source=mydb.db3;Version=3;Password=123456;";
private void longitudinalProfileToolStripMenuItem_Click(object sender, EventArgs e)
{
    saveProject(iProjectID);
    computeArea(iProjectID);
}

public int saveProject(iProjectID)
{
    SQLiteCommand sqlite_cmd;
    SQLiteCommand sqlite_cmd_PostWork;
    SQLiteCommand sqlite_cmd_Design;
    sqlite_conn = new SQLiteConnection(sConnectionString);
    sqlite_cmd.CommandText = "Delete from prework where pid = " + iProjectID + ";";
    sqlite_cmd.ExecuteNonQuery();
    sqlite_cmd.CommandText = "Insert into prework (pid, chainage, date) values (" + iProjectID + "," + fChainagePostwork + ",'" + dateTimePicker1.Value.Date.ToString("yyyy-MM-dd") + "');";
    sqlite_cmd.ExecuteNonQuery();
    sqlite_conn.Close();
return 1;
}

public int computeArea(iProjectID)
{
    SQLiteCommand sqlite_cmd;
    SQLiteCommand sqlite_cmd_PostWork;
    SQLiteCommand sqlite_cmd_Design;
    sqlite_conn = new SQLiteConnection(sConnectionString);
    sqlite_cmd.CommandText = "Delete from postwork where pid = " + iProjectID + ";";
    sqlite_cmd.ExecuteNonQuery();
    sqlite_cmd.CommandText = "Insert into postwork (pid, chainage, date) values (" + iProjectID + "," + fChainagePostwork + ",'" + dateTimePicker1.Value.Date.ToString("yyyy-MM-dd") + "');";
    sqlite_cmd.ExecuteNonQuery();
    sqlite_conn.Close();
return 1;
}
saveProject()函数工作正常。 但在computeArea()函数中,查询不会显示任何错误,但数据库/表不会更新/插入/删除

如果我第二次调用纵向profiletoolstripmenuitem_Click(objectsender,EventArgs e),那么它可以正常工作

但在前一次,它工作正常。
有什么问题吗?

您可以像这样使用“使用块”

String sConnectionString = "Data Source=mydb.db3;Version=3;Password=123456;";
private void longitudinalProfileToolStripMenuItem_Click(object sender, EventArgs e)
{
    saveProject(iProjectID);
    computeArea(iProjectID);
}

saveProject(iProjectID)
{
    SQLiteCommand sqlite_cmd;
    SQLiteCommand sqlite_cmd_PostWork;
    SQLiteCommand sqlite_cmd_Design;
    using (sqlite_conn = new SQLiteConnection(sConnectionString))
    {
        sqlite_conn.Open();
        sqlite_cmd.CommandText = "Delete from prework where pid = " + iProjectID + ";";
        sqlite_cmd.ExecuteNonQuery();
        sqlite_cmd.CommandText = "Insert into prework (pid, chainage, date) values (" + iProjectID + "," + fChainagePostwork + ",'" + dateTimePicker1.Value.Date.ToString("yyyy-MM-dd") + "');";
        sqlite_cmd.ExecuteNonQuery();
    }
}

computeArea(iProjectID)
{
    SQLiteCommand sqlite_cmd;
    SQLiteCommand sqlite_cmd_PostWork;
    SQLiteCommand sqlite_cmd_Design;

    using (sqlite_conn = new SQLiteConnection(sConnectionString))
    {
        sqlite_conn.Open();
        sqlite_cmd.CommandText = "Delete from postwork where pid = " + iProjectID + ";";
        sqlite_cmd.ExecuteNonQuery();
        sqlite_cmd.CommandText = "Insert into postwork (pid, chainage, date) values (" + iProjectID + "," + fChainagePostwork + ",'" + dateTimePicker1.Value.Date.ToString("yyyy-MM-dd") + "');";
        sqlite_cmd.ExecuteNonQuery();
    }
}

这两个表的模式是什么?您正在使用字符串连接,它除了使您暴露于SQL注入攻击之外,还将由于类型转换错误而中断。如果一个表需要一个字符串,而另一个表需要一个浮点,那么如果您试图输入一个带有意外小数分隔符的字符串,则第二个表将失败。顺便说一句,您的代码不是有效的C代码
computeArea(IProjectd)
不是有效的函数声明。实际编译的Post代码,包括任何可能隐藏错误的异常处理代码。如果我单独调用第二个函数,它实际上可以正常工作。如果我以和问题相同的方式调用,那么它不会显示任何错误@PanagiotisKanavosI添加了“sqlite_conn.Open();”