作一个小Demo,没想到出错了
using System;
using System.Data;
using
System.Configuration;
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;
///
<summary>
/// Db 的摘要说明
/// </summary>
public class
Db
{
private string _connstring =
System.Configuration.ConfigurationManager.ConnectionStrings["testConnectionString"].ConnectionString;
private SqlCommand _comm;
public Db()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public DataTable
getList()
{
string sql = "select * from test order by id
desc";
SqlDataAdapter da = new SqlDataAdapter(sql,
_connstring);
DataSet objdst = new DataSet();
da.Fill(objdst);
return objdst.Tables[0];
}
public void
insertNew(string name, string url)
{
string sql = "insert into
test (name,url) values (@name,@url)";
using (SqlConnection conn = new
SqlConnection(_connstring))
{
conn.Open();
_comm = new SqlCommand(sql, conn);
_comm.Parameters.Add("@name", SqlDbType.VarChar, 50).Value =
name;
_comm.Parameters.Add("@url", SqlDbType.VarChar, 50).Value =
url;
_comm.ExecuteNonQuery();
}
}
public
void Update(string name, string url, int id)
{
string sql =
"update test set name=@name,url=@url where id=@id";
using
(SqlConnection conn = new SqlConnection(_connstring))
{
conn.Open();
_comm = new SqlCommand(sql,
conn);
_comm.Parameters.Add("@name", SqlDbType.VarChar, 50).Value
= name;
_comm.Parameters.Add("@url", SqlDbType.VarChar, 50).Value
= url;
_comm.Parameters.Add("@id", SqlDbType.Int).Value =
id;
_comm.ExecuteNonQuery();
}
}
}
这是一个类文件,用来对数据库进行操作,放在app_code中
<form id="form1"
runat="server">
<div>
<asp:GridView ID="GridView1"
runat="server" AllowSorting="True"
AutoGenerateColumns="False"
DataKeyNames="ID" DataSourceID="SqlDataSource1" style="font-size: 12px;
font-family: Verdana; text-decoration: none">
<Columns>
<asp:BoundField DataField="ID"
HeaderText="ID" InsertVisible="False" ReadOnly="True"
SortExpression="ID" />
<asp:BoundField DataField="name"
HeaderText="name" SortExpression="name" />
<asp:BoundField DataField="url" HeaderText="url" SortExpression="url"
/>
<asp:CommandField ShowEditButton="True"
ShowDeleteButton="True" />
</Columns>
</asp:GridView>
<asp:FormView ID="FormView1" runat="server"
DataSourceID="SqlDataSource1" DefaultMode="Insert"
DataKeyNames="id">
<InsertItemTemplate>
Name:<asp:TextBox ID="_txt_name" runat="server"></asp:TextBox><br
/>
Url:<asp:TextBox ID="_txt_url"
runat="server"></asp:TextBox><br />
<asp:Button
CommandName="Insert" runat="server" ID="_btn_insert" Text="添加"/>
</InsertItemTemplate>
</asp:FormView>
<asp:ObjectDataSource TypeName="Db" ID="SqlDataSource1" runat="server"
SelectMethod="getList" UpdateMethod="Update" InsertMethod="insertNew"
OnInserted="SqlDataSource1_Inserted"
OnInserting="SqlDataSource1_Inserting">
<UpdateParameters>
<asp:Parameter Name="name"
Type="string" />
<asp:Parameter Name="url" Type="string"
/>
<asp:Parameter Name="id" Type="int16"
/>
</UpdateParameters>
<InsertParameters>
<asp:Parameter Name="name"
Type="string" />
<asp:Parameter Name="url" Type="string"
/>
</InsertParameters>
</asp:ObjectDataSource>
</div>
</form>
.aspx文件
展示的结果:
GridView中能正确用getList取得数据,也能点击GridView中的Edit进行数据编辑,且数据能更新至数据库.问题出在FormView的添加中。点击添加时报错:
被准备语句 '(@name varchar(50),@url varchar(50))insert into test (name,url) ' 需要参数 @name,但未提供该参数。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。异常详细信息: System.Data.SqlClient.SqlException: 被准备语句 '(@name varchar(50),@url varchar(50))insert into test (name,url) ' 需要参数 @name,但未提供该参数。
源错误:
行 39: _comm.Parameters.Add("@name", SqlDbType.VarChar, 50).Value = name; |
源文件: c:\Documents and Settings\Administrator\桌面\ZhangTM\App_Code\Db.cs 行: 41
也就是name/url值为空了
这二个值如何去取?不会是FindControl去取吧?
请大家帮我看看