2016-02-26 74 views
0

我正在制作C#Winform,并且我正在从xml读取一些数据以及与用户交互。然后我需要将这些数据放入本地数据库,然后通过子表单读取它。C#,Winform,将数据插入本地数据库并在DataGridVIew中查看

我声明,并读取数据:

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

(直到这里所有的作品我只是张贴了更好的代码comprehence)

现在,我尝试了一些数据插入到本地数据库表,我用两种方法可悲的是他们都没有工作对我来说:

第一:

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中。谢谢你们 !

+0

检查cmd.ExecuteNonQuery()返回的内容。它应该返回受影响行的数量(https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery%28v=vs.110%29.aspx) – vidriduch

+0

你究竟期待什么第二个查询要*做*?这是一个'SELECT',但你从不对结果做任何事情。 – David

回答

0

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); 
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); 
} 
+0

希望这会对你有用 –

0

谢谢大家的帮助和指南!主要是感谢你Tanmay Nehete。你的第一次修正就像魅力一样。

我列的名称前添加@:

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

而行:

int i=cmd.ExecuteNonQuery(); 

和数据存储在本地数据库中,并显示在所有DataGridViews谢谢你!

相关问题