2012-11-11 42 views
2

我正在爲我的老闆在工作時的報價管理員工作,我遇到了一些問題。這是一個WPF C#應用程序,這是我第一次構建與SQL Server數據庫一起工作的任何東西。我目前有三個問題。INSERT聲明中的問題(我認爲)

背景:

當用戶打開他們與一個DataGrid,一個新的報價按鈕,我尚未創建其他幾個控件招呼應用。當他們按下新的報價按鈕時,會彈出一個新窗口,其中會顯示一個窗體,其中包含用於客戶名稱,數量等的文本框。窗體的底部是一個提交按鈕,此時窗口將關閉,他們添加的信息將作爲新行插入到DataGrid中。

問題一:

一個在我的數據庫中的字段被稱爲Open_Quote,它應該是保持我們收到的訂單的日期。這是以編程方式處理的,也是我第一個問題涉及的問題。我將在此帖子底部包含所有代碼,但是當用戶點擊提交時,我收到以下錯誤:「轉換日期和/或時間字符串時轉換失敗。」

問題二:

在試圖測試我的代碼的休息,回去以後再修改日期的問題,我評論說出來的代碼,並試圖再次運行我的程序。這次我得到了一個不同的錯誤:「'newQuote.Qty'的語法錯誤。」

問題三:

再次出注釋代碼,以最終測試我的代碼的其餘部分,我收到了第三個錯誤:「字符串或二進制數據將被截斷這一進程已被終止。」

我的希望是有一段代碼會導致所有這三個問題,但我可能完全在那裏。試圖弄清楚這一點,我一直在拉我的頭髮。總之,這裏的代碼:

newQuote.xaml.cs:

private void SubmitQuotebtn_Click(object sender, RoutedEventArgs e) 
    { 
     CustomerData newQuote = new CustomerData(); 

     int quantity; 
     quantity = Convert.ToInt32(Qtytxt.Text); 

     string theDate = System.DateTime.Today.Date.ToString("d"); 

     newQuote.OpenQuote = theDate; 
     newQuote.CustomerName = CustNametxt.Text; 
     newQuote.OEMName = OemNametxt.Text; 
     newQuote.Qty = quantity; 
     newQuote.QuoteNumber = QuoteNumtxt.Text; 
     newQuote.FdNumber = FabDrawingNumtxt.Text; 
     newQuote.RfqNumber = RfqNumtxt.Text; 
     newQuote.RevNumber = RevNumtxt.Text; 

     try 
     { 
      string insertConString = Sqtm.Properties.Settings.Default.SqtmDbConnectionString; 

      using (SqlConnection insertConnection = new SqlConnection(insertConString)) 
      { 
       insertConnection.Open(); 

       SqlCommand cmd = new SqlCommand("INSERT INTO General_Info(Open_Quote, Customer_Name, OEM_Name, Qty, Quote_Num, Fab_Drawing_Num, " 
               + "Rfq_Num, Rev_Num) values('newQuote.OpenQuote', 'newQuote.CustomerName', 'newQuote.OemName', 'newQuote.Qty' " 
               + "'newQuote.QuoteNumber', 'newQuote.FdNumber', 'newQuote.RfqNumber', 'newQuote.RevNumber')", insertConnection); 

       cmd.ExecuteNonQuery(); 

      } 
     } 

     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 

    } 

CustomerData.cs:

class CustomerData 
{ 
    private string _CustomerName; 
    private string _OEMName; 
    private string _OpenQuote; 
    private int _Qty; 
    private string _QuoteNumber; 
    private string _FdNumber; 
    private string _RfqNumber; 
    private string _RevNumber; 

    public CustomerData() 
    { 
     // empty constructor 
    } 

    public string CustomerName 
    { 
     get { return _CustomerName; } 
     set { _CustomerName = value; } 
    } 

    public string OpenQuote 
    { 
     get { return _OpenQuote; } 
     set { _OpenQuote = value; } 
    } 

    public string OEMName 
    { 
     get { return _OEMName; } 
     set { _OEMName = value; } 
    } 

    public int Qty 
    { 
     get { return _Qty; } 
     set { _Qty = value; } 
    } 

    public string QuoteNumber 
    { 
     get { return _QuoteNumber; } 
     set { _QuoteNumber = value; } 
    } 

    public string FdNumber 
    { 
     get { return _FdNumber; } 
     set { _FdNumber = value; } 
    } 

    public string RfqNumber 
    { 
     get { return _RfqNumber; } 
     set { _RfqNumber = value; } 
    } 

    public string RevNumber 
    { 
     get { return _RevNumber; } 
     set { _RevNumber = value; } 
    } 
} 

而作爲一個參考,這裏是我如何SQLServer中設置此表:

Open_Quote, date, not null 
Customer_Name, varchar(25), not null 
OEM_Name, varchar(25), null 
Qty, int, not null 
Qute_Num, varchar(20), null 
Fab_Drawing_Num, varchar(20), not null 
Rfq_Num, varchar(10), null 
Rev_Num, varchar(10), null 

在此先感謝任何幫助我的人,

  • 安德魯
+2

一切都在引號...所以你只是將這些字符串值,而不是實際的變量。嘗試值(''+ newQuote.OpenQuote +''「等等...或者只是使用參數,它會更容易閱讀 – MikeSmithDev

+0

,並且如果直接對數據庫運行插入操作,您是否會看到相同的錯誤(即 - )或者甚至在你的應用中硬編碼值,以查看是否有任何組合的數據可以工作,然後你可以向後工作。 –

+1

它沒有通過日期newQuote.OpenQuote,他是傳遞字符串'newQuote.OpenQuote'。使用參數http://www.dotnetperls.com/sqlparameter – MikeSmithDev

回答

0

與參數再試一次,讓我們知道如何去。 http://www.dotnetperls.com/sqlparameter

編輯:或者泰森T.說。這隻會更好一點。

爲了讓數據顯示在數據網格中,在執行插入操作之後,可以重新綁定網格。確保更新數據源,以便重新插入剛插入的數據。如果遇到問題,請顯示您在何處/如何設置網格的數據源。

+0

嘿邁克,使用參數完美解決。謝謝你的幫助。我將來會更多地使用Linq,但現在這樣做會很好。感謝您所有的幫助。現在,我只需要在用戶點擊子窗體中的提交後,在父窗體的數據網格中獲取數據更新。我想我可以自己弄清楚,但如果你知道一個好辦法,我肯定會感謝你的建議。 – wrigley06

+0

嘿邁克,我一直在努力綁定到數據網格,它只是不工作。我已經在http://stackoverflow.com/questions/13337558/trouble-updating-my-datagrid-in-wpf上發佈了一個新問題。如果有人想在這裏看一下,我會很感激。謝謝。 – wrigley06

0

試試這個:

SqlCommand cmd = new SqlCommand("INSERT INTO General_Info(Open_Quote, Customer_Name, OEM_Name, Qty, Quote_Num, Fab_Drawing_Num, " 
              + "Rfq_Num, Rev_Num) values('" + newQuote.OpenQuote + "','" + newQuote.CustomerName + "','" + newQuote.OemName + "','" + newQuote.Qty + "','" + newQuote.QuoteNumber + "','" + newQuote.FdNumber + "', '" + newQuote.RfqNumber + "','" + newQuote.RevNumber + "' " 
              + ")", insertConnection);