新手求助c#连接access数据库的问题

flyinman 2012-03-07 12:43:04
连数据库总是提示“至少一个参数没有被指定值”
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);
}
}
}
...全文
105 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
EnForGrass 2012-03-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 net_lover 的回复:]
string strSQL = "insert into test(test) values ('" + s.Replace("'","''") + "');";//s

你的 s是变量啊,
[/Quote]
你应该拼接字符串
string strSQL = "insert into test(test) values ('" + s + "');";//s

孟子E章 2012-03-07
  • 打赏
  • 举报
回复
string strSQL = "insert into test(test) values ('" + s.Replace("'","''") + "');";//s

你的 s是变量啊,
dalmeeme 2012-03-07
  • 打赏
  • 举报
回复
应该这样写:
string strSQL = "insert into test(test) values (?)";//这条sql语句要给cmd对象
cmd.Parameters.AddWithValue("?",s);
cmd.ExecuteNonQuery();
就是用参数化sql,非常安全,而且可读性好。s的类型可以是string、datetime、int等,只要同数据库对应字段一致就行了。
EnForGrass 2012-03-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 net_lover 的回复:]

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

日期类型加

bool
传入1,0就可以
[/Quote]
日期就和字符串一样操作
孟子E章 2012-03-07
  • 打赏
  • 举报
回复
int类型不加引号
string strSQL = "insert into test(test) values (" + s + ");";

日期类型加

bool
传入1,0就可以
flyinman 2012-03-07
  • 打赏
  • 举报
回复
那么int型变量和时间型变量,以及bool型变量又该如何写呢?

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧