ADO.NET的SQL语句中,往往不是静态的语句,而是需要接受传递过来的参数,比如典型的登录功能,需要查找指定的用户名:

string sqlQuery = "SELECT * FROM W_User WHERE UserName = '" + userName + "'";

上例中userName就是传递过来的用户名参数,这个参数可能来自于Windows表单,也可能来自于Web页面的文本框。但上面的代码的应用方式,在实际应用是需要绝对禁止的,因为有可能被黑客利用,写上恶意代码,用来破解数据库,即所谓SQL注入。

因此,实际应用中,需要使用添加参数的方式完成任务,从而避免SQL注入。比如下面的办法:

            string sqlQuery = "SELECT * FROM W_User";
sqlQuery += " WHERE UserName = @userName"; //声明形式参数@userName
SqlCommand comm = new SqlCommand(sqlQuery, conn); //创建SqlCommand对象
comm.Parameters.AddWithValue("@userName", userName); //将实际参数userName传递给SqlCommand对象(comm)的形式参数@userName
conn.Open();
SqlDataReader dr = comm.ExecuteReader();

上述代码中,使用@userName作为形式参数,其中@是形式参数的前缀,后跟实际参数名称。

对于SqlDataAdapter来说,一般是这样使用的,

            string sqlQuery = "SELECT * FROM W_User";
SqlDataAdapter da = new SqlDataAdapter(sqlQuery, conn);
DataSet ds = new DataSet();
            da.Fill(ds);

由于这里没有出现SqlCommand对象,因此无法利用SqlCommand对象的参数传递方式完成SqlDataAdapter对象的传递参数,但实际应用中,SqlDataAdapter也需要进行参数传递,问题如何解决呢?

解决办法是:首先创建SqlCommand对象,并在该对象中传递参数,然后再创建SqlDataAdapter对象,设置其SelectCommand(或InsertCommand, DeleteCommand, UpdateCommand)属性值即可,如下面代码:

                string sqlQuery;

                sqlQuery = "SELECT * FROM W_User";
sqlQuery += " WHERE UserName = @userName"; //SqlDataAdapter利用SqlCommand传递参数
SqlCommand comm = new SqlCommand(sqlQuery, Conn);
comm.Parameters.AddWithValue("@userName", userName); SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = comm; DataSet ds = new DataSet();
da.Fill(ds);

这样的情况下,SqlDataAdapter对象就可以接受传递参数了。

当然,也可以直接对SqlDataAdapter对象进行传递参数,注意与相应的命令对应(即SelectCommand,InsertCommand, UpdateCommand, DeleteCommand),比如下面的代码,没有使用SqlCommand对象传递参数,而是对SqlDataAdapter对象da使用了 da.SelectCommand.Parameters.AddWithValue()进行,如果对比上一个代码段,可以看出,这里的da.SelectCommand替代了上一个代码段中的SqlCommand对象comm

                string sqlQuery;

                sqlQuery = "SELECT * FROM W_User";
sqlQuery += " WHERE UserName = @userName"; //DataAdapter利用SqlCommand传递参数
//SqlCommand comm = new SqlCommand(sqlQuery, conn);
//comm.Parameters.AddWithValue("@userName", userName); SqlDataAdapter da = new SqlDataAdapter(sqlQuery, conn);
//直接使用DataAdapter传递参数
da.SelectCommand.Parameters.AddWithValue("@userName", userName); DataSet ds = new DataSet();
da.Fill(ds);

C# ADO.NET SqlDataAdapter中传递参数的更多相关文章

  1. 关于一些url中传递参数有空格问题

    1.关于一些url中传递参数有空格问题: url.replace(/ /g, "%20") 从上面的例子中可以看到可以用:replace(/ /g, "%20" ...

  2. 【openresty】向lua代码中传递参数

    前面介绍FormInputNginxModule模块时,明白了openresty如何获取post提交的数据. 然后,如果需要通过lua处理这些数据,需要把数据作为参数传递到lua中,lua获取了这些数 ...

  3. mfc 在VC的两个对话框类中传递参数的三种方法

    弄了好久,今天终于把在VC中的对话框类之间传递参数的问题解决了,很开心,记录如下: 1. 我所建立的工程是一个基于MFC对话框的应用程序,一共有三个对话框,第一个对话框为主对话框,所对应的类为CTMD ...

  4. JQuery中如何click中传递参数

    代码如下: click(data,fn)中的data其实是json对象,取的时候,只能通过当前的事件源来取,data是默认放在event中的,所以这里的data是eventdata,引用的时候也使用e ...

  5. Struct2 向Action中传递参数(中文乱码问题)

    就是把视图上的值传递到Action定义的方法中 也就是把数据从前台传递到后台 三种方式: 1.  使用action属性接收参数 比如jsp页面: <body> 使用action属性接收参数 ...

  6. ASP.net button类控件click事件中传递参数

    单击Button会同时触发这两个事件,但先执行Click,后执行Command,在button控件中加上参数属性 CommandArgument='' 在click响应函数中可以用以下代码获得传递的参 ...

  7. sys.argv向脚本中传递参数

    可以向脚本中传递无限多个参数,其值是一个列表,默认sys.argv[0]内容是脚本文件路径加文件名 test.py文件中的内容如下: #! /usr/bin/python3import sys pri ...

  8. URL中传递参数给视图函数

    1. 采用在url中使用变量的方式: 在path的第一个参数中,使用<参数名>的方式可以传递参数.然后在视图函数中也要写一个参数,视图函数中的参数必须和url中的参数名称保持一致,不然就找 ...

  9. JSF在ui:include中传递参数到对应控制层

    在JSF中使用ui:include方法可以引入一个页面到当前页面中,如果要向被包含的页面中传入参数,可以使用ui:param标签,这个标签类似于f:param,只不过一个用于页面,一个用于实际标签.示 ...

随机推荐

  1. jquery点击添加样式,再点击取出样式

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  2. 使用linux的nc来进行文件的传输

    NAME nc - arbitrary TCP and UDP connections and listensSYNOPSIS     nc [-46DdhklnrStUuvz] [-i interv ...

  3. 在django中使用自定义标签实现分页功能

    效果演示: github地址:https://github.com/mncu/django_projects/tree/master/django_projects/pagination_test 本 ...

  4. 自动化(Automation)兼容的数据类型

    自动化(Automation)兼容的数据类型    

  5. sqlserver 加内置dll的使用内存

  6. 利用should.js进行测试

    nodejs 环境 , 安装should.js包 (npm install should) var should = require('should'); //正确1, 错误0 100 precent ...

  7. UVa 490 - Rotating Sentences

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=94&page=s ...

  8. codevs4919 线段树练习4

    4919 线段树练习4  时间限制: 1 s  空间限制: 128000 KB       题目描述 Description 给你N个数,有两种操作 1:给区间[a,b]内的所有数都增加X 2:询问区 ...

  9. sql left join、right join、inner join

    left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录inner join(等值连接) 只 ...

  10. git撤销commit

    请参考该文章:http://www.cnblogs.com/ningkyolei/p/5026011.html 场景: 不小心commit了一个不应该commit的修改,但是还没有push,想撤销那个 ...