读书人

新手c#连接access数据库的有关问题

发布时间: 2012-03-27 13:44:24 作者: rapoo

新手求助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等,只要同数据库对应字段一致就行了。

读书人网 >C#

热点推荐