在学习oledb.net 连接oracle,SQL语句里有单引号不知怎么解决,请教各位。
如下面一段代码:string sDB_Name, sDB_User, sDB_Passwd;
string s_contentA; //要插入数据库的字符串
sDB_Name = "192.168.1.8";
sDB_User = "dbuser";
sDB_Passwd = "dbpwd";
//连接数据库
OleDbConnection sOraConn = new OleDbConnection();
sOraConn.ConnectionString ="Provider=MSDAORA;DATA SOURCE=(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST ="+sDB_Name + ")(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = " +sDB_Name+")));PASSWORD=" + sDB_User+";PERSIST SECURITY INFO=True;USER ID=" + sDB_Passwd;
sOraConn.Open();
//构建SQL语句
OleDbCommand oraCmd = sOraConn.CreateCommand();
oraCmd.CommandText = "insert into mytb1 (contentA,contentB) values("?","测试")";
oraCmd.Parameters.Clear();
oraCmd.Parameters.Add(new OleDbParameter("@contentA", OleDbType.VarChar));
oraCmd.Parameters[0].Value = s_contentA;
oraCmd.ExecuteNonQuery();在这段代码中,s_contentA变量是个字符串,字符串里有单位引号,如“I dont't know”。SQL语句里单引号是特殊字作符,我应该怎么处理才能使这条语句正常插入数据库里?因为我是要循环调用进行数据插入的,而字符串变量s_contentA的内容是不定的,有时会出现单引号,有时不会出现,怎么处理?
如下面一段代码:string sDB_Name, sDB_User, sDB_Passwd;
string s_contentA; //要插入数据库的字符串
sDB_Name = "192.168.1.8";
sDB_User = "dbuser";
sDB_Passwd = "dbpwd";
//连接数据库
OleDbConnection sOraConn = new OleDbConnection();
sOraConn.ConnectionString ="Provider=MSDAORA;DATA SOURCE=(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST ="+sDB_Name + ")(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = " +sDB_Name+")));PASSWORD=" + sDB_User+";PERSIST SECURITY INFO=True;USER ID=" + sDB_Passwd;
sOraConn.Open();
//构建SQL语句
OleDbCommand oraCmd = sOraConn.CreateCommand();
oraCmd.CommandText = "insert into mytb1 (contentA,contentB) values("?","测试")";
oraCmd.Parameters.Clear();
oraCmd.Parameters.Add(new OleDbParameter("@contentA", OleDbType.VarChar));
oraCmd.Parameters[0].Value = s_contentA;
oraCmd.ExecuteNonQuery();在这段代码中,s_contentA变量是个字符串,字符串里有单位引号,如“I dont't know”。SQL语句里单引号是特殊字作符,我应该怎么处理才能使这条语句正常插入数据库里?因为我是要循环调用进行数据插入的,而字符串变量s_contentA的内容是不定的,有时会出现单引号,有时不会出现,怎么处理?
解决方案 »
- winform里怎么实现“应用”的按钮
- c# 关于null
- vs2003引用不了高版本的Dev控件
- installshield 打包的问题
- 在线等 急! DataGridView 单元格绑定tag属性问题
- System.FormatException的错误
- pop3协议中Content-Transfer-Encoding:8bit怎么解码/
- 读取Excel 定义了过多字段
- 为什么在解决方案或项目上按鼠标右键,将项目/解决方案添加进源代码管理 的选项?
- xml如何加密
- sos:类型“System.Data.Linq.DataContext”在未被引用的程序集中定义。
- 问个C#下一个数字跟表里数字比较的问题
这一行改为:
oraCmd.CommandText = "insert into mytb1 (contentA,contentB) values(" + s_contentA +",'测试')";
这样是不行的,我试过。s_contentA里面的单引号使得SQL已经变成不符合SQL规则的语句。
/// <summary>
/// 执行带参数sql语句或存储过程,返回所影响的行数
/// </summary>
/// <param name="cmdText">带参数的sql语句和存储过程名</param>
/// <param name="cmdType">命令类型</param>
/// <param name="cmdParms">参数集合</param>
/// <returns>返回所影响的行数</returns>
public static int ExecuteNonQuery(string cmdText, CommandType cmdType, OracleParameter[] cmdParms)
{
int count;
try
{
init();
cmd = new OracleCommand();
SetCommand(cmd, cmdText, cmdType, cmdParms);
count = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
conn.Close();
}
catch (Exception ex)
{
throw new Exception(ex.Message.ToString());
}
return count;
}
#endregion
IDbDataParameter[] param = db.CreateDBParameter(type,
new string[] { "docdirid" },
new DbType[] { DbType.String);
new object[] { model.DocDirId}) int result = db.ExecuteNonQuery(sql, CommandType.Text, param);
各位好
请问我C#连接ORACLE的时候提示:
-------------------------------
------------------------------------------------------
消息内容ORA-12154: TNS: 无法解析指定的连接标识符---------------------------
确定
----------------------------------------------------------
但是我PL_SQL连接正常
请问这个是怎么回事呢?
IDbDataParameter[] param = db.CreateDBParameter(type,
new string[] { "contentA", "contentB" },
new DbType[] { DbType.String, DbType.String },
new object[] { "I don't know", "测试" }); int result = db.ExecuteNonQuery(sql, CommandType.Text, param);
string sDB_Name, sDB_User, sDB_Passwd;
string s_contentA; //要插入数据库的字符串
sDB_Name = "192.168.1.8";
sDB_User = "dbuser";
sDB_Passwd = "dbpwd";
//连接数据库
OleDbConnection sOraConn = new OleDbConnection();
sOraConn.ConnectionString ="Provider=MSDAORA;DATA SOURCE=(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST ="+sDB_Name + ")(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = " +sDB_Name+")));PASSWORD=" + sDB_User+";PERSIST SECURITY INFO=True;USER ID=" + sDB_Passwd;
sOraConn.Open();
//构建SQL语句
OleDbCommand oraCmd = sOraConn.CreateCommand();
oraCmd.CommandText = "insert into mytb1 (contentA,contentB) values(:contentA,'测试')";
oraCmd.Parameters.Clear();
oraCmd.Parameters.Add(new OleDbParameter("contentA", OleDbType.VarChar));
oraCmd.Parameters[0].Value = s_contentA;
oraCmd.ExecuteNonQuery();
要测试下,意思就是把一个单引号转换为两个单引号。
这样oracle处理时就不转义了会保存一个单引号的。
改成
oraCmd.CommandText = "insert into mytb1 (contentA,contentB) values(@contentA,"测试")";
提示感谢happy09li和anzhiqiang_touzi的回复。happy09li在第3楼的回复中有一句,cmd = new OracleCommand();所以,我想问问你们所说的方法是不是引用了System.Data.OracleClient命名空间?我引用的是System.Data.OleDb。我的数据库是us7ASCII字符集的,用System.Data.OracleClient命名空间无法正确显示中文。
这里的db是由什么创建的?看了帮助,CreateDBParameter属于DbCommand类,在System.Data.Common命名空间里,但没学会怎么创建一个DbCommand实例。