使用wpf c#在访问数据库中插入字符串,日期和备忘录值

时间:2014-05-09 14:53:43

标签: c# sql wpf ms-access-2007

我有4个控件。一个是参考号,日期,主题和正文。引用号和主题是msaccess中的文本字段,长度为255个字符。正文字段是备忘录字段。问题是当我尝试使用参数函数将值插入表中时,我只在SQL命令文本中采用备注字段,命令功能成功执行。

但是一旦我包含任何其他字段,我就会开始收到错误"该字段太小而无法接受您输入的数据量。尝试插入或粘贴较少的数据。"任何人都可以帮我解决这个错误吗?

编码如下:

if (btnNew.Content.Equals("_New"))
{
    btnNew.Content = "_Save";

    Clear_Contents();

    dtpDate.Focus();

    btnMod.IsEnabled = false;

    btnDel.IsEnabled = false;

   btnPrint.IsEnabled = false;

}

else

        {

            OleDbConnection conn = DBConnection.getDBConnection();

            OleDbCommand command = conn.CreateCommand();

            string rtfText;

            TextRange richText = new TextRange(txtBody.Document.ContentStart,txtBody.Document.ContentEnd);

            using (MemoryStream ms = new MemoryStream())

            {

                richText.Save(ms, DataFormats.Rtf);

                rtfText = Encoding.ASCII.GetString(ms.ToArray());

            }

            try
            {
                command.Parameters.Add("@body", OleDbType.LongVarChar).Value=rtfText;
              command.Parameters.Add("@refno",OleDbType.VarChar,255).Value=txtPCode.Text;
                command.CommandText = "insert into letter_master(total_ref,let_body)values (@refno,@body)";
                conn.Open();
                command.ExecuteNonQuery();
                conn.Close();
                MessageBox.Show("Record Saved Successfully !!!", DBConnection.Comp_Name, MessageBoxButton.OK, MessageBoxImage.Information);
            }                
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

        }

1 个答案:

答案 0 :(得分:0)

您需要更改将参数添加到OleDbCommand参数集合的顺序

command.Parameters.Add("@refno",OleDbType.VarChar,255).Value=txtPCode.Text;
command.Parameters.Add("@body", OleDbType.LongVarChar).Value=rtfText;
command.CommandText = "insert into letter_master(total_ref,let_body)values (@refno,@body)";
conn.Open();

OleDb提供程序无法通过名称识别参数,但只能按其位置识别参数。

这意味着添加到集合的第一个参数值将用于找到第一个占位符的位置,第二个用于第二个占位符。因此,在原始代码中,OleDb提供程序将尝试保存total_ref字段中richtextbox字段的值,从而导致上述错误。