【问题标题】:Insert string, date and memo value in access database using wpf c#使用wpf c#在access数据库中插入字符串、日期和备忘录值
【发布时间】:2014-05-09 14:53:43
【问题描述】:

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

但是,只要我包含任何其他字段,我就会开始收到错误消息“该字段太小,无法接受您输入的数据量。请尝试插入或粘贴更少的数据。”谁能帮我解决这个错误?

编码如下:

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

        }

【问题讨论】:

  • 做到了,但什么也没发生。尝试了 LongVarWChar 仍然没有任何反应。同样的错误。

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


【解决方案1】:

您需要更改将参数添加到 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 提供程序将尝试将来自 Richtextbox 字段的值保存在 total_ref 的字段中,从而导致上述错误。

【讨论】:

  • 非常感谢史蒂夫。你救了我的命。我真的发自内心地感谢你。我的电子邮件 ID 是:sushant.verma1977@gmail.com。如果将来我需要任何帮助或者在某些软件开发方面有成果,我可以提供您的电子邮件地址,然后我可以与您联系。请在我上面提到的地址上给我发电子邮件,以便我与您联系。感谢您的回复。
  • 很高兴能提供帮助。在 SO 上再见。
猜你喜欢
  • 1970-01-01
  • 2011-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-28
相关资源
最近更新 更多