cmd.Parameters.Add 无法传递参数的烦人问题

csbmm 2009-05-06 09:12:12




OracleCommand cmd = new OracleCommand() ;


cmd.CommandText = " Insert into TBL_STUDENT values ";
cmd.CommandText += " (";
cmd.CommandText += " @NAME";
cmd.CommandText += " ,@STUDENT_ID";
cmd.CommandText += " ,@GENDER";
cmd.CommandText += " ,@CLASS";
cmd.CommandText += " )";

cmd.Parameters.Add("@NAME", OracleType.VarChar, 20).Value = myfrm.txt_Name.Text.ToString();
cmd.Parameters.Add("@STUDENT_ID", OracleType.VarChar, 20).Value = myfrm.txt_Student_Id.Text.ToString();
cmd.Parameters.Add("@GENDER", OracleType.VarChar, 10).Value = myfrm.txt_Gender.Text.ToString();
cmd.Parameters.Add("@CLASS", OracleType.VarChar, 10).Value = myfrm.txt_Class.Text.ToString();

return cmd ;


调试时发现 这四个控件的值都已经取到了,
myfrm.txt_Name.Text.ToString();myfrm.txt_Student_Id.Text.ToStrin();
myfrm.txt_Gender.Text.ToString();myfrm.txt_Class.Text.ToString();

但是最后 cmd.CommandText .ToString ()的值仍然是 Insert into TBL_STUDENT values ( @NAME ,@STUDENT_ID ,@GENDER ,@CLASS )

也就是说控件值并没有传入sql语句,为什么会这样呢?




...全文
1159 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
不色祭奠 2011-05-07
  • 打赏
  • 举报
回复
我等我等
l396634084 2011-01-19
  • 打赏
  • 举报
回复
你这个代码段有很多不必要的地方,而且不方便。
好的公司做项目这个有点玄乎,太饶了。。。
csbmm 2009-05-06
  • 打赏
  • 举报
回复
已经搞定了哦,虽然很简陋,以后就把这个当公司项目的SQL连接的模板用了。

前面的错误主要是Oracle command 没有正确绑定到Oracle Connect

搞定后的代码如下:



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.OracleClient ;


namespace sql_test
{

public partial class Form1 : Form

{
DataSet ds = new DataSet();

public Form1()
{
InitializeComponent();
}

private void btn_Select_Click(object sender, EventArgs e)
{

Sql mysql = new Sql (this);


mysql.CreateQuery(mysql.Insert_TBL_STUDENT(), ds);


}

}

}





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.OracleClient;


namespace sql_test
{
class Sql
{
//Form1 myform = new Form1();
public Form1 myfrm;
public Sql (Form1 frm)
{
myfrm = frm;
}

# region CreateQuery

public void CreateQuery(OracleCommand mycmd, DataSet ds)
{

//连接字符串
string connstring = " Data Source = mytemp; User ID = CC; Password = 1;";

OracleConnection conn = new OracleConnection(connstring);

mycmd.Connection = conn;


ds.Clear();

//尝试连接数据库
try
{
conn.Open();



//使用Dataset
OracleDataAdapter da = new OracleDataAdapter(mycmd );

da.Fill(ds);
}


catch (Exception ee)
{
//Response.Write(ee.Message);//如果有错误,输出错误信息
}

finally
{
conn.Close(); //关闭连接
}

}

# endregion


# region Insert_TBL_STUDENT

public OracleCommand Insert_TBL_STUDENT()
{


OracleCommand cmd = new OracleCommand() ;


cmd.CommandText = " Insert into TBL_STUDENT values ";
cmd.CommandText += " (";
cmd.CommandText += " :NAME";
cmd.CommandText += " ,:STUDENT_ID";
cmd.CommandText += " ,:GENDER";
cmd.CommandText += " ,:CLASS";
cmd.CommandText += " )";


cmd.Parameters.Add("NAME", OracleType.VarChar, 20).Value = myfrm.txt_Name.Text.ToString();
cmd.Parameters.Add("STUDENT_ID", OracleType.VarChar, 20).Value = myfrm.txt_Student_Id.Text.ToString();
cmd.Parameters.Add("GENDER", OracleType.VarChar, 10).Value = myfrm.txt_Gender.Text.ToString();
cmd.Parameters.Add("CLASS", OracleType.VarChar, 10).Value = myfrm.txt_Class.Text.ToString();


return cmd ;


}

# endregion

}
}

skyaspnet 2009-05-06
  • 打赏
  • 举报
回复
学习
qldsrx 2009-05-06
  • 打赏
  • 举报
回复
错在这里:mysql.CreateQuery(mysql.Insert_TBL_STUDENT(), ds);

这里面带的参数是mysql.Insert_TBL_STUDENT()返回的是InsertCommand吧,而你传入的位置是SelectCommand.看这段OracleDataAdapter da = new OracleDataAdapter(cmd );你把mysql.Insert_TBL_STUDENT()的返回值作为cmd用来初始化da了,带参数的da初始化里的cmd是SelectCommand,要设置InsertCommand必须通过da.InsertCommand来设置。
csbmm 2009-05-06
  • 打赏
  • 举报
回复
我已经照六楼兄弟说得改了,执行没有出做,可是数据却没有插入数据库,实在找不出错在哪里了,干脆把我的全部代码贴出来吧。

这是主窗体代码:


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.OracleClient ;


namespace sql_test
{

public partial class Form1 : Form

{
DataSet ds = new DataSet();

public Form1()
{
InitializeComponent();
}

private void btn_Select_Click(object sender, EventArgs e)
{

Sql mysql = new Sql (this);


mysql.CreateQuery(mysql.Insert_TBL_STUDENT(), ds);





}

}

}



这是SQL 模块的代码


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.OracleClient;


namespace sql_test
{
class Sql
{
//Form1 myform = new Form1();
public Form1 myfrm;
public Sql (Form1 frm)
{
myfrm = frm;
}

# region CreateQuery

public void CreateQuery(OracleCommand mycmd, DataSet ds)
{

//连接字符串
string connstring = " Data Source = mytemp; User ID = CC; Password = 1;";

OracleConnection conn = new OracleConnection(connstring);

OracleCommand cmd = conn.CreateCommand ();

ds.Clear();

//尝试连接数据库
try
{
conn.Open();

cmd = mycmd;

//使用Dataset
OracleDataAdapter da = new OracleDataAdapter(cmd );

da.Fill(ds);
}


catch (Exception ee)
{
//Response.Write(ee.Message);//如果有错误,输出错误信息
}

finally
{
conn.Close(); //关闭连接
}

}

# endregion


# region Insert_TBL_STUDENT

public OracleCommand Insert_TBL_STUDENT()
{


OracleCommand cmd = new OracleCommand() ;


cmd.CommandText = " Insert into TBL_STUDENT values ";
cmd.CommandText += " (";
cmd.CommandText += " :NAME";
cmd.CommandText += " ,:STUDENT_ID";
cmd.CommandText += " ,:GENDER";
cmd.CommandText += " ,:CLASS";
cmd.CommandText += " )";

cmd.Parameters.Add("NAME", OracleType.VarChar, 20).Value = myfrm.txt_Name.Text.ToString();
cmd.Parameters.Add("STUDENT_ID", OracleType.VarChar, 20).Value = myfrm.txt_Student_Id.Text.ToString();
cmd.Parameters.Add("GENDER", OracleType.VarChar, 10).Value = myfrm.txt_Gender.Text.ToString();
cmd.Parameters.Add("CLASS", OracleType.VarChar, 10).Value = myfrm.txt_Class.Text.ToString();





return cmd ;


}

# endregion

}
}

csbmm 2009-05-06
  • 打赏
  • 举报
回复
我已经照六楼兄弟说得改了,执行没有出做,可是数据却没有插入数据库,实在找不出错在哪里了,干脆把我的全部代码贴出来吧。

这是主窗体代码:

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.OracleClient ;


namespace sql_test
{

public partial class Form1 : Form

{
DataSet ds = new DataSet();

public Form1()
{
InitializeComponent();
}

private void btn_Select_Click(object sender, EventArgs e)
{

Sql mysql = new Sql (this);


mysql.CreateQuery(mysql.Insert_TBL_STUDENT(), ds);





}

}

}


这是SQL 模块的代码

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.OracleClient;


namespace sql_test
{
class Sql
{
//Form1 myform = new Form1();
public Form1 myfrm;
public Sql (Form1 frm)
{
myfrm = frm;
}

# region CreateQuery

public void CreateQuery(OracleCommand mycmd, DataSet ds)
{

//连接字符串
string connstring = " Data Source = mytemp; User ID = CC; Password = 1;";

OracleConnection conn = new OracleConnection(connstring);

OracleCommand cmd = conn.CreateCommand ();

ds.Clear();

//尝试连接数据库
try
{
conn.Open();

cmd = mycmd;

//使用Dataset
OracleDataAdapter da = new OracleDataAdapter(cmd );

da.Fill(ds);
}


catch (Exception ee)
{
//Response.Write(ee.Message);//如果有错误,输出错误信息
}

finally
{
conn.Close(); //关闭连接
}

}

# endregion


# region Insert_TBL_STUDENT

public OracleCommand Insert_TBL_STUDENT()
{


OracleCommand cmd = new OracleCommand() ;


cmd.CommandText = " Insert into TBL_STUDENT values ";
cmd.CommandText += " (";
cmd.CommandText += " :NAME";
cmd.CommandText += " ,:STUDENT_ID";
cmd.CommandText += " ,:GENDER";
cmd.CommandText += " ,:CLASS";
cmd.CommandText += " )";

cmd.Parameters.Add("NAME", OracleType.VarChar, 20).Value = myfrm.txt_Name.Text.ToString();
cmd.Parameters.Add("STUDENT_ID", OracleType.VarChar, 20).Value = myfrm.txt_Student_Id.Text.ToString();
cmd.Parameters.Add("GENDER", OracleType.VarChar, 10).Value = myfrm.txt_Gender.Text.ToString();
cmd.Parameters.Add("CLASS", OracleType.VarChar, 10).Value = myfrm.txt_Class.Text.ToString();





return cmd ;


}

# endregion

}
}



llsen 2009-05-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 qldsrx 的回复:]
我寒,我汗,我大汗。
OracleCommand嘛,你参数用错了,Oracle的参数不是那样写的,“@”要换成“:”才行,然后你在cmd.Parameters.Add的时候还要去掉“:”才行。


C# code
OracleCommand cmd = new OracleCommand() ;

cmd.CommandText = " Insert into TBL_STUDENT values ";
cmd.CommandText += " (";
cmd.CommandText += " :NAME";
cmd.CommandText += …
[/Quote]

对,忘记了
goldxinx 2009-05-06
  • 打赏
  • 举报
回复
已经传入参数了,不用管cmd.CommandText .ToString ()的值是什么 执行下肯定好用
qldsrx 2009-05-06
  • 打赏
  • 举报
回复
我寒,我汗,我大汗。
OracleCommand嘛,你参数用错了,Oracle的参数不是那样写的,“@”要换成“:”才行,然后你在cmd.Parameters.Add的时候还要去掉“:”才行。


OracleCommand cmd = new OracleCommand() ;

cmd.CommandText = " Insert into TBL_STUDENT values ";
cmd.CommandText += " (";
cmd.CommandText += " :NAME";
cmd.CommandText += " ,:STUDENT_ID";
cmd.CommandText += " ,:GENDER";
cmd.CommandText += " ,:CLASS";
cmd.CommandText += " ):;

cmd.Parameters.Add("NAME", OracleType.VarChar, 20).Value = myfrm.txt_Name.Text.ToString();
cmd.Parameters.Add("STUDENT_ID", OracleType.VarChar, 20).Value = myfrm.txt_Student_Id.Text.ToString();
cmd.Parameters.Add("GENDER", OracleType.VarChar, 10).Value = myfrm.txt_Gender.Text.ToString();
cmd.Parameters.Add("CLASS", OracleType.VarChar, 10).Value = myfrm.txt_Class.Text.ToString();

return cmd ;
csrwgs 2009-05-06
  • 打赏
  • 举报
回复
我比较老实,一般是这么写的

OracleParameter para = new (("@NAME", OracleType.VarChar, 20);
para.Value=myfrm.txt_Name.Text.ToString();

cmd.Parameters.Add(para);

...
...
..



//cmd.Parameters.Add).Value =
LoveLife_Go 2009-05-06
  • 打赏
  • 举报
回复
你查看cmd.CommandText .ToString ()的这个就是原样,看不到传进去的值的
zgke 2009-05-06
  • 打赏
  • 举报
回复
最后执行的时候才会传递参数.
llsen 2009-05-06
  • 打赏
  • 举报
回复
分开写
//先
cmd.Parameters.Add("@NAME", OracleType.VarChar, 20);
//再
cmd.Parameters["@NAME"].Value = myfrm.txt_Name.Text.ToString();

//想直接就
cmd.Parameters.Add("@NAME",myfrm.txt_Name.Text.ToString());
csbmm 2009-05-06
  • 打赏
  • 举报
回复
开发工具是VS 2008

110,502

社区成员

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

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

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