2012-06-27 29 views
0

我正在使用VS2010和SqlServer2008-r2在C#中設計基於窗口的應用程序。我從數據庫中截取數據

使用基於服務的數據庫(密度纖維板),那一天是具有四個字段的表,如果我存儲在表

數據和關閉應用程序並重新運行數據獲取應用程序丟失。

爲什麼如此以及如何擺脫它。

我使用按照常規保存

private void Save(object sender, EventArgs e) 
     { 
      Program.connection.Close(); 

      bool k = srchpreventry(); 

      try 
      { 
       if (k) 
       { 

       string query = " update orderform set Enrolment_Expected = " + textBox2.Text + ", Stock_on_Hand=" + textBox3.Text + ", Number_Required = "+ textBox4.Text + " where Name = '" + textBox1.Text + "';"; 
       SqlCommand cmd = new SqlCommand(query, Program.connection); 

       cmd.ExecuteNonQuery(); 

       Program.connection.Close(); 
      } 


      else 
      { 
       // Program.connection.Open(); 

       string query = "insert into orderform(Name,Enrolment_Expected,Stock_on_Hand,Number_Required) values('" + textBox1.Text + "', '" + textBox2.Text + "', ' " + textBox3.Text + "',' " + textBox4.Text + "')"; 

       SqlCommand cmd = new SqlCommand(query, Program.connection); 

       cmd.ExecuteNonQuery(); 

       Program.connection.Close(); 
      } 

     } 

     catch (Exception ae) 
     { 
      string str = ae.ToString(); 
      MessageBox.Show(str); 
     } 

     finally 
     { 
      textBox1.Text = ""; 
      textBox2.Text = ""; 
      textBox3.Text = ""; 
      textBox4.Text = ""; 
      textBox1.Enabled = false; 
      textBox2.Enabled = false; 
      textBox3.Enabled = false; 
      textBox4.Enabled = false; 
      Program.connection.Close(); 
     } 

    }  



public bool srchpreventry() 
     { 

      Program.connection.Open(); 

      string query = " Select name from orderform where Name = '" + textBox1.Text + "';"; 

      SqlCommand cmd = new SqlCommand(query, Program.connection); 

      SqlDataReader dtr = cmd.ExecuteReader(); 

      if (dtr.Read() == true) 
      { 
       dtr.Close(); 
       return true; 
      } 
      else 
      { 
       dtr.Close(); 
       return false; 
      } 
     } 



private void textBox1_TextChanged(object sender, EventArgs e) 
     { 
      Program.connection.Close(); 
      Program.connection.Open(); 



      string query = " Select * from orderform where Name = '" + textBox1.Text + "';"; 

      SqlCommand cmd = new SqlCommand(query, Program.connection); 

      SqlDataReader dtr = cmd.ExecuteReader(); 

      if (dtr.Read() == true) 
      { 
       textBox2.Text = dtr[1].ToString(); 
       textBox3.Text = dtr[2].ToString();//GetString(2); 
       textBox4.Text = dtr[3].ToString(); 
      } 

      else 
      { 
       textBox2.Text = ""; 
       textBox3.Text = ""; 
       textBox4.Text = ""; 

      } 


     } 



public static SqlConnection connection = null; 
     static string appath = Library_Records.Program.app_path; 

string connectionstring = string.Format(@"Data Source=.\SQLEXPRESS;AttachDbFilename={0};Integrated Security=True;User Instance=True", appath); 

static string dbfiles = null; 
     internal static string app_path 
     { 
      get { return dbfiles = "|Datadirectory|\\records.mdf"; } 
     } 


/*******************datagrid code********************/ 
Program.connection.Open(); 
        string query = "select * from orderform"; 
        SqlDataAdapter MyDA = new SqlDataAdapter(); 
        MyDA.SelectCommand = new SqlCommand(query, Program.connection); 
        DataTable table = new DataTable(); 
        MyDA.Fill(table); 

        BindingSource bSource = new BindingSource(); 
        bSource.DataSource = table; 

        dataGridView1.DataSource = bSource; 
+0

你可以給我們一個截斷數據的例子,或者顯示存儲和讀取數據的代碼嗎?一個可能的原因是,你嘗試將字符串存儲在小於你存儲的字符串的nvarchar/varchar/nchar/char字段中(例如,如果你在varchar(3)字段中存儲「Hello」,你會得到字符串「 Hel「當你找回它)。 – mortb

+0

@mortb數據丟失當我重新啓動應用程序時,數據庫中沒有剩餘數據 – jaggi

+0

@mortb我添加了用於保存進程的例程 – jaggi

回答

0

立即檢查,看看是否可以增加允許在例如爲nvarchar(最大)列字符的原因也可能是爲nvarchar(200) - 這僅僅是示例

+0

這不是這種情況 – jaggi

0

在Visual Studio中?

你不是通過chane擁有VIsual Studio每次啓動調試時再次加載相同的空數據庫?

並關閉應用程序並重新運行該應用程序數據將丟失。

要麼有人忽略插入時發生的錯誤,不提交事務或tvisal工作室只是在每次啓動時將相同的rdatabase模板映射到目錄中。

+0

直接插入數據庫的值,即通過右鍵單擊數據庫,然後添加新的查詢仍保留在數據庫中,但我通過文本框輸入的數據和保存序列會丟失 – jaggi

-1

我強烈(強調強烈)建議您開始使用存儲過程(無論是在代碼還是在數據庫中),但除此之外..你不開始一個事務或類似的東西? 或將Program.Connection類代碼發佈到問題中。

+0

我已添加連接類代碼 – jaggi

+1

我會投票使用ORM(實體框架或流利NHibernate)而不是存儲過程或內聯SQL。 IT以這種方式工作要快得多。我會說不要使用存儲的程序,除非你需要它們的性能等。 – mortb

+0

@mortb偉大的說。答案是偏離主題,並且顯示完全缺乏如何高效工作的經驗。 ORM在開發時間內擊敗SP,在90%的時間內已經足夠好了。 – TomTom