2

我正在为我的老板在工作中使用报价管理器,但我遇到了一些问题。这是一个 WPF C# 应用程序,它是我第一次构建任何与 SQL Server 数据库一起工作的东西。我目前遇到三个问题。

背景:

当用户打开应用程序时,他们会看到一个 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);
        }

    }

客户数据.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

提前感谢任何帮助我的人,

  • 安德鲁
4

2 回答 2

0

用参数再试一次,让我们知道它是怎么回事。 http://www.dotnetperls.com/sqlparameter

编辑:或者 Tieson T. 所说的。多参与一点就更好了。

要让数据显示在数据网格中,插入后,您可以重新绑定网格。确保您更新数据源,以便它重新提取您刚刚插入的数据。如果您有问题,请显示您在何处/如何设置网格的数据源。

于 2012-11-11T04:16:21.500 回答
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);
于 2012-11-11T04:31:29.887 回答