2 qq 29651709 qq_29651709 于 2015.07.28 08:27 提问

C#与数据库的问题,求帮忙

图片说明
现在我需要将图中的richTextBox2中的五条数据加入到oracle数据库里,需要一条一条的输入,网上百度的都是整个richTextBox2都输入进去,造成了
图片说明
string connString = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.1.6.161) (PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl)));Persist Security Info=True;User Id=zhianguankong2; Password=zhianguankong2123";
OracleConnection conn = new OracleConnection(connString);
try
{
conn.Open();
string sql = "insert into TB_BLACKLIST(VEHID,CARDID) values('VEHID',:CARDID)";
OracleCommand cmd = new OracleCommand(sql, conn);
OracleParameter parn = new OracleParameter(":CARDID", richTextBox2.Text);
cmd.Parameters.Add(parn);
OracleDataReader odr = cmd.ExecuteReader();
while (odr.Read())
{
richTextBox2.Text = (odr.GetOracleString(1).ToString());//输出字段
}
odr.Close();
}
catch (Exception ee)
{
richTextBox2.Text = (ee.Message); //如果有错误,输出错误信息
}
finally
{
conn.Close(); //关闭连接
}
这是我连接数据库的代码,我需要做的是将数据经过AES加密后,插入到数据库黑名单表tb_blacklist。
图片说明

6个回答

lzp_lrp
lzp_lrp   Ds   Rxr 2015.07.28 08:33

把richTextBox2里的数据拆分为5条,然后放在一个字符串数组里,分别进行加密,保存到数据库中,执行5次insert就没有这个问题了

lzp_lrp
lzp_lrp 拆分字符串可以用split,然后写个循环,拼成insert语句
2 年多之前 回复
qq_29651709
qq_29651709 有相关代码吗。
2 年多之前 回复
WebKernel
WebKernel   2015.07.28 10:04

你插入的身份证号 等于 整个文本的值,提示很明显,超出你数据库中设置的最大字符长度

WebKernel
WebKernel   2015.07.28 10:13

一行一行查出来 然后“,”分割

qq_29651709
qq_29651709 好的,那你知道我上面的框里该怎么写IF语句吗
2 年多之前 回复
save4me
save4me   Ds   Rxr 2015.07.28 10:24

参考TextBoxBase.Lines 属性
使用richTextBox2.Lines[行号]可以读取一行数据。

qq_29651709
qq_29651709 好的,那你知道我上面的框里该怎么写IF语句吗
2 年多之前 回复
caozhy
caozhy   Ds   Rxr 2015.07.28 11:33

foreach (string s in richTextBox.Lines)
插入

上次不是回答你了

qq_29651709
qq_29651709 好的,那你知道我上面的框里该怎么写IF语句吗
2 年多之前 回复
save4me
save4me   Ds   Rxr 2015.07.28 14:00

参考C#利用ODP.NET往oracle中高效插入百万数据

string[] tempArray = richTextBox2.Lines;

//设置一个数据库的连接串
string connectStr = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.1.6.161) (PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl)));Persist Security Info=True;User Id=zhianguankong2; Password=zhianguankong2123";
OracleConnection conn = new OracleConnection(connectStr);
OracleCommand command = new OracleCommand();
command.Connection = conn; //到此为止,还都是我们熟悉的代码,下面就要开始喽

//这个参数需要指定每次批插入的记录数
int recc = tempArray.Length;
command.ArrayBindCount = recc;

//在这个命令行中,用到了参数,参数我们很熟悉,但是这个参数在传值的时候
//用到的是数组,而不是单个的值,这就是它独特的地方
command.CommandText = "insert into TB_BLACKLIST(VEHID,CARDID) values('VEHID',:CARDID)";
conn.Open();

//下面定义几个数组,分别表示字段,数组的长度由参数直接给出
string[] CARDID = new string[recc];

// 为了传递参数,不可避免的要使用参数,下面会连续定义
// 从名称可以直接看出每个参数的含义,不在每个解释了
OracleParameter cardIdParam = new OracleParameter("CARDID", OracleDbType.Varchar2);
cardIdParam.Direction = ParameterDirection.Input;
cardIdParam.Value = CARDID;
command.Parameters.Add(cardIdParam);

//在下面的循环中,先把数组定义好,而不是像上面那样直接生成SQL
for (int i = 0; i < recc; i++) {
    CARDID[i] = tempArray.Lines[i]; //可以使用加密函数加密文本
}

//这个调用将把参数数组传进SQL,同时写入数据库
command.ExecuteNonQuery();
Csdn user default icon
上传中...
上传图片
插入图片