C#, Winform, 将数据插入本地数据库并在 DataGridVIew 中查看它

本文关键字:DataGridVIew Winform 数据 插入 数据库 | 更新日期: 2023-09-27 18:36:16

我正在制作一个C# Winform,我已经从xml中读取了一些数据,并与用户交互。然后,我需要将该数据放入本地数据库,然后通过子窗体读取它。

我正在声明并读取数据:

public int score = 0; //not null after user interaction
public string candidate = null; //not null after user interaction
XElement Title = Test.Root.Element("title");
XElement MaxScore = Test.Root.Element("property_maxscore");
XElement PassScore = Test.Root.Element("property_passscore");

(直到这里所有工作,我只是发布它以获得更好的代码理解)

现在我尝试将一些数据插入本地数据库表,遗憾的是我使用了两种方法,这两种方法都对我不起作用:

第一:

SqlCeConnection con = new SqlCeConnection(@"Data Source=...users.sdf");
con.Open();
SqlCeCommand cmd = new SqlCeCommand(@"INSERT INTO final_tests (test_name, candidate, score, pass_score, max_score, completed) VALUES (@test_name, @candidate, @score, @pass_score, @max_score, @completed)", con);
cmd.Parameters.AddWithValue("test_name", (string) Title);
cmd.Parameters.AddWithValue("candidate", candidate);
cmd.Parameters.AddWithValue("score", score);
cmd.Parameters.AddWithValue("pass_score", (string) PassScore);
cmd.Parameters.AddWithValue("max_score", (string) MaxScore);
cmd.Parameters.AddWithValue("completed", DateTime.Now);
cmd.ExecuteNonQuery();
con.Close();

第二:

SqlCeConnection con = new SqlCeConnection(@"Data Source=...users.sdf");
con.Open();
using (SqlCeCommand comm = new SqlCeCommand("SELECT * FROM final_tests WHERE score LIKE @score", con))
{
comm.Parameters.Add(new SqlCeParameter("score", score));
comm.ExecuteNonQuery();
}

我测试了每一行,它们都成功执行,但是当我手动打开数据库时,数据库是空的,当然其他子窗体中的 DataGridView 也是空的。

我尝试了许多修改,但不幸的是,没有一个有效。我找不到我的错误在哪里。如果需要更多信息,我在这里。结束我的问题:读取来自 xml 和用户交互的数据,然后必须放入上述本地数据库,保存以供以后使用,并以其他子窗体显示在 DataGridView 中。谢谢大家!

C#, Winform, 将数据插入本地数据库并在 DataGridVIew 中查看它

SqlCeConnection con = new SqlCeConnection(@"Data Source=...用户.sdf");

con.Open();
SqlCeCommand cmd = new SqlCeCommand(@"INSERT INTO final_tests (test_name, candidate, score, pass_score, max_score, completed) VALUES (@test_name, @candidate, @score, @pass_score, @max_score, @completed)", con);
cmd.Parameters.AddWithValue("@test_name", (string) Title);
cmd.Parameters.AddWithValue("@candidate", candidate);
cmd.Parameters.AddWithValue("@score", score);
cmd.Parameters.AddWithValue("@pass_score", (string) PassScore);
cmd.Parameters.AddWithValue("@max_score", (string) MaxScore);
cmd.Parameters.AddWithValue("@completed", DateTime.Now);
int i=cmd.ExecuteNonQuery();

     if(i>0)
    {
         // Success
    }
    con.Close();

和第二次修正

SqlCeConnection con = new SqlCeConnection(@"Data Source=...users.sdf");
con.Open();
using (SqlCeCommand comm = new SqlCeCommand("SELECT * FROM final_tests WHERE score LIKE @score", con))
{
comm.Parameters.Add(new SqlCeParameter("score", score));
SsqlDataAdapter aa= new SsqlDataAdapter(Comm);
DataTable dt= new Datatable();
da.Fill(dt);
}

谢谢大家的帮助和指导!主要感谢Tanmay Nehete。您的第一次更正就像一个魅力。

我在列名前添加了@:

cmd.Parameters.AddWithValue("@test_name", (string) Title);

和行:

int i=cmd.ExecuteNonQuery();

并且数据存储在本地数据库中,并显示在所有数据网格视图中 谢谢 !