日期:2014-05-18  浏览次数:20887 次

新手求助c#连接access数据库的问题
连数据库总是提示“至少一个参数没有被指定值”
string s = textbox1.text;
string strSQL = "insert into test(test) values (s);";//s换成具体的字符串就没问题了,但不能直接用s不知道怎么回 事。
ExecuteAccessNonQuery(strSQL);
就这几句上有问题,
当把sql语句中的s换成比如"asdasd"等等的字符串时就没问题。
但直接用s就报错。
我也不知道哪里有问题,求解决。


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
namespace 疾控中心业务处理系统.流行病监测模块
{
  public partial class freeCureIn : Form
  {
  public freeCureIn()
  {
  InitializeComponent();
  }

  public static void ExecuteAccessNonQuery(string strSQL)
  {
  string ACCESS_CONN_STRING = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= Database3.accdb";

  OleDbConnection conn = new OleDbConnection(ACCESS_CONN_STRING);

  conn.Open();

  OleDbCommand cmd = new OleDbCommand(strSQL, conn);

  cmd.CommandType = CommandType.Text;

  using (OleDbTransaction trans = conn.BeginTransaction())
  {
  cmd.Transaction = trans;

  try
  {
  cmd.ExecuteNonQuery();

  trans.Commit();

  }
  catch
  {
  trans.Rollback();
  throw;
  }
  finally
  {
  conn.Close();
  }
  }
  }
/*
  就下面几行有问题啊
*/
  private void button1_Click(object sender, EventArgs e)
  {
  string s = textBox1.Text;
  MessageBox.Show(s);
  string strSQL = "insert into test(test) values (s);";
  ExecuteAccessNonQuery(strSQL);
  }
  }
}


------解决方案--------------------
string strSQL = "insert into test(test) values ('" + s.Replace("'","''") + "');";//s

你的 s是变量啊,
------解决方案--------------------
探讨
string strSQL = "insert into test(test) values ('" + s.Replace("'","''") + "');";//s

你的 s是变量啊,

------解决方案--------------------
探讨

int类型不加引号
string strSQL = "insert into test(test) values (" + s + ");";

日期类型加

bool
传入1,0就可以

------解决方案--------------------
应该这样写:
string strSQL = "insert into test(test) values (?)";//这条sql语句要给cmd对象
cmd.Parameters.AddWithValue("?",s);
cmd.ExecuteNonQuery();
就是用参数化sql,非常安全,而且可读性好。s的类型可以是string、datetime、int等,只要同数据库对应字段一致就行了。