using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;public partial class Insert : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string strCon = "Data Source=localhost;Initial Catalog=pubs;Integrated Security=True;User ID =sa;Password =sa";
SqlConnection myConnection = new SqlConnection(strCon);
//打开数据库连接
myConnection.Open(); SqlCommand myCommand = new SqlCommand("select * from authors", myConnection);
//设置InsertCommand
SqlCommand sqlInsertCommand1 = new SqlCommand();
sqlInsertCommand1.CommandText = @"INSERT INTO authors(au_id, au_lname, au_fname, phone, address, city, state, zip, contract)
VALUES (@au_id, @au_lname, @au_fname, @phone, @address, @city, @state, @zip, @contract);
SELECT au_id, au_lname, au_fname, phone, address, city, state, zip, contract FROM authors WHERE (au_id = @au_id)";///疑问1,为啥这里要写两句sql语句?@au_id等带@au_id的单词起啥作用?
sqlInsertCommand1.Connection = myConnection;
sqlInsertCommand1.Parameters.Add(new SqlParameter("@au_id", System.Data.SqlDbType.VarChar, 11, "au_id"));///疑问2,这句话啥意思?这个句子语法上怎么讲啊?
sqlInsertCommand1.Parameters.Add(new SqlParameter("@au_lname", System.Data.SqlDbType.VarChar, 40, "au_lname"));
sqlInsertCommand1.Parameters.Add(new SqlParameter("@au_fname", System.Data.SqlDbType.VarChar, 20, "au_fname"));
sqlInsertCommand1.Parameters.Add(new SqlParameter("@phone", System.Data.SqlDbType.VarChar, 12, "phone"));
sqlInsertCommand1.Parameters.Add(new SqlParameter("@address", System.Data.SqlDbType.VarChar, 40, "address"));
sqlInsertCommand1.Parameters.Add(new SqlParameter("@city", System.Data.SqlDbType.VarChar, 20, "city"));
sqlInsertCommand1.Parameters.Add(new SqlParameter("@state", System.Data.SqlDbType.VarChar, 2, "state"));
sqlInsertCommand1.Parameters.Add(new SqlParameter("@zip", System.Data.SqlDbType.VarChar, 5, "zip"));
sqlInsertCommand1.Parameters.Add(new SqlParameter("@contract", System.Data.SqlDbType.Bit, 1, "contract")); SqlDataAdapter Adapter = new SqlDataAdapter();
Adapter.SelectCommand = myCommand;
Adapter.InsertCommand = sqlInsertCommand1; DataSet myDs = new DataSet();
Adapter.Fill(myDs); //获取DataTable
DataTable myTable = myDs.Tables[0];
//插入数据
DataRow myRow = myTable.NewRow();
//为新行赋值
myRow["au_id"] = "322-22-2222";
myRow["au_lname"] = "Li";
myRow["au_fname"] = "Paul";
myRow["phone"] = "12345678";
myRow["city"] = "Chengdu";
myRow["contract"] = 1; //添加到Rows集合中
myTable.Rows.Add(myRow); //提交数据到数据库
Adapter.Update(myDs); //关闭数据库重新读取数据
myConnection.Close();
myConnection.Open();
Adapter.Fill(myDs);
//显示插入的数据
Response.Write("<h3>插入数据</h3><hr>");
Response.Write("<table border=1 cellspacing=0 cellpadding=2>"); //显示列名字
Response.Write("<tr bgcolor=#DAB4B4>");
foreach (DataColumn myColumn in myTable.Columns)
{
Response.Write("<td>" + myColumn.ColumnName + "</td>");
} Response.Write("</tr>"); //查找插入的行
foreach (DataRow row in myTable.Rows)
{
if (row["au_id"].ToString() == "322-22-2222")
{
Response.Write("<tr>");
foreach (DataColumn myColumn in myTable.Columns)
{
Response.Write("<td>" + row[myColumn] + "</td>");
}
Response.Write("</tr>");
break;
}
}
Response.Write("</table>"); //关闭与数据库的连接
myConnection.Close();
}
}
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;public partial class Insert : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string strCon = "Data Source=localhost;Initial Catalog=pubs;Integrated Security=True;User ID =sa;Password =sa";
SqlConnection myConnection = new SqlConnection(strCon);
//打开数据库连接
myConnection.Open(); SqlCommand myCommand = new SqlCommand("select * from authors", myConnection);
//设置InsertCommand
SqlCommand sqlInsertCommand1 = new SqlCommand();
sqlInsertCommand1.CommandText = @"INSERT INTO authors(au_id, au_lname, au_fname, phone, address, city, state, zip, contract)
VALUES (@au_id, @au_lname, @au_fname, @phone, @address, @city, @state, @zip, @contract);
SELECT au_id, au_lname, au_fname, phone, address, city, state, zip, contract FROM authors WHERE (au_id = @au_id)";///疑问1,为啥这里要写两句sql语句?@au_id等带@au_id的单词起啥作用?
sqlInsertCommand1.Connection = myConnection;
sqlInsertCommand1.Parameters.Add(new SqlParameter("@au_id", System.Data.SqlDbType.VarChar, 11, "au_id"));///疑问2,这句话啥意思?这个句子语法上怎么讲啊?
sqlInsertCommand1.Parameters.Add(new SqlParameter("@au_lname", System.Data.SqlDbType.VarChar, 40, "au_lname"));
sqlInsertCommand1.Parameters.Add(new SqlParameter("@au_fname", System.Data.SqlDbType.VarChar, 20, "au_fname"));
sqlInsertCommand1.Parameters.Add(new SqlParameter("@phone", System.Data.SqlDbType.VarChar, 12, "phone"));
sqlInsertCommand1.Parameters.Add(new SqlParameter("@address", System.Data.SqlDbType.VarChar, 40, "address"));
sqlInsertCommand1.Parameters.Add(new SqlParameter("@city", System.Data.SqlDbType.VarChar, 20, "city"));
sqlInsertCommand1.Parameters.Add(new SqlParameter("@state", System.Data.SqlDbType.VarChar, 2, "state"));
sqlInsertCommand1.Parameters.Add(new SqlParameter("@zip", System.Data.SqlDbType.VarChar, 5, "zip"));
sqlInsertCommand1.Parameters.Add(new SqlParameter("@contract", System.Data.SqlDbType.Bit, 1, "contract")); SqlDataAdapter Adapter = new SqlDataAdapter();
Adapter.SelectCommand = myCommand;
Adapter.InsertCommand = sqlInsertCommand1; DataSet myDs = new DataSet();
Adapter.Fill(myDs); //获取DataTable
DataTable myTable = myDs.Tables[0];
//插入数据
DataRow myRow = myTable.NewRow();
//为新行赋值
myRow["au_id"] = "322-22-2222";
myRow["au_lname"] = "Li";
myRow["au_fname"] = "Paul";
myRow["phone"] = "12345678";
myRow["city"] = "Chengdu";
myRow["contract"] = 1; //添加到Rows集合中
myTable.Rows.Add(myRow); //提交数据到数据库
Adapter.Update(myDs); //关闭数据库重新读取数据
myConnection.Close();
myConnection.Open();
Adapter.Fill(myDs);
//显示插入的数据
Response.Write("<h3>插入数据</h3><hr>");
Response.Write("<table border=1 cellspacing=0 cellpadding=2>"); //显示列名字
Response.Write("<tr bgcolor=#DAB4B4>");
foreach (DataColumn myColumn in myTable.Columns)
{
Response.Write("<td>" + myColumn.ColumnName + "</td>");
} Response.Write("</tr>"); //查找插入的行
foreach (DataRow row in myTable.Rows)
{
if (row["au_id"].ToString() == "322-22-2222")
{
Response.Write("<tr>");
foreach (DataColumn myColumn in myTable.Columns)
{
Response.Write("<td>" + row[myColumn] + "</td>");
}
Response.Write("</tr>");
break;
}
}
Response.Write("</table>"); //关闭与数据库的连接
myConnection.Close();
}
}
解决方案 »
- DAL中Sql语句作为常量好吗?
- 请问有没有3gp的插入插件?
- 我用C#做新闻发布系统,怎样将文本域中输入的数据加上换行存入数据库中
- 做个很小的软件用什么开发比较好
- 求助..?
- C#中做Flash播放器。报错:未能导入ActiveX控件。
- 如何向其它应用程序发送消息?
- 使用NUnit为什么不能打开dll文件
- 阻塞模式Socket 怎么也会出现: 无法立即完成一个非阻挡性套接字操作(WSAEWOULDBLOCK 10035) 错误?
- 自定义一个继存自DataGridViewTextBoxCell的类,如何重写其中的Paint方法?
- 求一款目前最优秀的将VB.NET程序自动转换为C#程序的软件。再问:VS.NET自身带有这个功能吗?
- 高手指点如何实现这个小功能?
--------->
这个意思是得到刚才插入的数据
也就是说先把数据插入Table,然后返回Table的插入的行至于@au_id是防止SQL注入的一种写法,具体可以参考MSDN关于SqlParameter的解释
疑问2,这句话啥意思?这个句子语法上怎么讲啊?
-----》
这个就是简单的应用SqlParameter也就是说在SQL文中@au_id是一个变量
sqlInsertCommand1.Parameters.Add(new SqlParameter("@au_id", System.Data.SqlDbType.VarChar, 11, "au_id"));
在这里把这个变量进行赋值可以参考
http://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqlparameter(VS.80).aspx
比如说你有个SQL语句
string sql="select * from users where username='"+username+"' and password='"+password+"'";
如果用户输入的信息如下:
Username:';drop table users—
Password:你执行下看看会发生什么但是如果用了SqlParameter
就不会发生这种情况
///小强的意思是用au_id的值代替@au_id的值么?那么au_id的值从哪里来呢?System.Data.SqlDbTyep.VarChar和11分别指啥呢?谢谢小强(btw,为啥用小强?看上去实在恶心。)谢谢。
比如说你这个SQL语句他的意思是从表authors 中取出记录,当au_id = @au_id的时候这个写法就是@au_id是变量
你可以传任意的值
sqlInsertCommand1.Parameters.Add(new SqlParameter("@au_id", System.Data.SqlDbType.VarChar, 11, "au_id"));
这句话就是给这个变量传值意思是"@au_id"这个变量是System.Data.SqlDbType.VarChar类型,长度是11,值为"au_id"这样你的SQL文就变成了
SELECT * FROM authors WHERE au_id = 'au_id'不知道解释清楚没有,呵呵btw:俺上大学在学校外面租房子,满屋子的小强,跟小强很有感情的说~~
sqlInsertCommand1.Parameters.Add(new SqlParameter("@au_id", System.Data.SqlDbType.VarChar, 11, "au_id"));
这个意思是
"@au_id"这个变量是System.Data.SqlDbType.VarChar类型,长度是11,对应的数据库字段为"au_id"
的时候根据Table里面的值传递进去的
可以改成
sqlInsertCommand1.Parameters.Add(new SqlParameter("@au_id", System.Data.SqlDbType.VarChar, 11, "au_id11")); 么?
然后在改成myRow["au_id11"] = "322-22-2222";///这样给au_id11赋值322-22-2222,然后@au_id得到au_id11的值,最后把这个值替代sqlInsertCommand1.CommandText = @"INSERT INTO authors(au_id, au_lname, au_fname, phone, address, city, state, zip, contract)
VALUES (@au_id, @au_lname, @au_fname, @phone, @address, @city, @state, @zip, @contract);
SELECT au_id, au_lname, au_fname, phone, address, city, state, zip, contract FROM authors WHERE (au_id = @au_id)";///替代这句话里面的@au_id对么?
可以改成
sqlInsertCommand1.Parameters.Add(new SqlParameter("@au_id", System.Data.SqlDbType.VarChar, 11, "au_id11")); 么? 不可以
因为最后一个参数代表的是数据库中字段名称myRow["au_id11"] 你这个里面au_id11是不存在的~~~~
那么,
myRow["au_id"] = "322-22-2222";///这个au_id的值是322-22-2222,是表示
sqlInsertCommand1.CommandText = @"INSERT INTO authors(au_id, au_lname, au_fname, phone, address, city, state, zip, contract)
VALUES (@au_id, @au_lname, @au_fname, @phone, @address, @city, @state, @zip, @contract);
SELECT au_id, au_lname, au_fname, phone, address, city, state, zip, contract FROM authors WHERE (au_id = @au_id)";///代替这个里面红色的部分的值么?
///
如果 myRow["au_id"] 表示的值是代替 @au_id,那么myRow["@au_id"]的值是代替 @@au_id?
如果不是这样,那么通过什么来绑定au_id和@au_id之间的值传递呢?有没有个流程么?///真不好意思。。偶晕头转向了。
是的myRow["au_id"] 表示的值是代替 @au_id,
这是对的myRow["@au_id"]的值是代替 @@au_id?
这不对myRow["au_id"] 中的au_id表示的是你sql中select出来的au_id列在SQL文中的@au_id,表示这个地方是一个参数
然后在SqlParameter的地方给这个参数赋值
具体在执行SQL文的时候,是如何把SqlParameter中的值代替掉SQL文中的@au_id参数,那是MS帮我们做掉的事情
string queryString, string tableName)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = new SqlCommand(queryString, connection);
SqlCommandBuilder builder = new SqlCommandBuilder(adapter); connection.Open(); DataSet dataSet = new DataSet();
adapter.Fill(dataSet, tableName); //code to modify data in DataSet here //Without the SqlCommandBuilder this line would fail
adapter.Update(dataSet, tableName); return dataSet;
}
}
另外,很苦恼的是,这段从书上抄下来的代码居然不能运行...报错:
Adapter.Fill(myDs); //错误 1 与“System.Data.Common.DbDataAdapter.Fill(System.Data.DataTable)”最匹配的重载方法具有一些无效参数
错误 2 参数“1”: 无法从“DataSet”转换为“System.Data.DataTable” DataTable myTable = myDs.Tables[0];//错误 3 “DataSet”并不包含“Tables”的定义 ....很多.
这句我在05下编译没有问题
呵呵
SqlCommand sqlUpdateCommand1 = new SqlCommand();
sqlUpdateCommand1.CommandText = @"Update authors set city = @city WHERE au_id = @Original_au_id";/// sqlUpdateCommand1.Connection = myConnection;
sqlUpdateCommand1.Parameters.Add(new SqlParameter("@city", System.Data.SqlDbType.VarChar, 20, "city"));///
sqlUpdateCommand1.Parameters.Add(new SqlParameter("@Original_au_id", System.Data.SqlDbType.VarChar, 11, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "au_id", System.Data.DataRowVersion.Original, null));///这句话那么长,那么多个参数是啥意思?可以精简成sqlUpdateCommand1.Parameters.Add(new SqlParameter("@Original_au_id",
System.Data.SqlDbType.VarChar, 11,"au_id");么?第三个问题,
如果
加上
Adapter.UpdateComand=sqlUpdateComman1;那么往下
执行一段修改代码
在执行
Adapter.Update(myDs); ///是执行Adapter.InsertCommand 呢,还是执行Adapter.UpdateComand呢?
谢谢.