c#中数据库更新问题,急!在线等
请问,我现在已经在datagridview中显示了相关表的内容,并通过datagridview中的datagridview.Rows[e.RowIndex].Cells[i].Value.ToString()给下面的textBox赋值,现在我想通过对textBox的修改来更新数据库,怎么办?
[解决办法]
听过gridview不编码就能完成察看 增 删 改 的操作,不过没实现过,哪位高人知道的话指点下迷津
下面是我的笨方法--编码实现的update操作:
//conn是连接字符串
SqlDataAdapter da = new SqlDataAdapter( "select * from res where id= " + id,conn);
da.MissingSchemaAction = System.Data.MissingSchemaAction.AddWithKey;
SqlCommandBuilder scb = new SqlCommandBuilder(da);
da.Fill(dt);
System.Data.DataRow row = dt.Rows[0];
row[ "name "] = TextBox1.Text;
da.Update(dt);
[解决办法]
sql = "update Role set Rolename=@Rolename,ModifyDate=@ModifyDate,Modifier=@Modifier,Description=@Description where sId=@sId ";
cmd = new SqlCommand(sql, conn);
cmd.CommandType = CommandType.Text;
cmd.Parameters.Add( "@Rolename ", SqlDbType.NChar, 40, "Rolename ");
cmd.Parameters.Add( "@ModifyDate ", SqlDbType.DateTime,12, "ModifyDate ");
cmd.Parameters.Add( "@Modifier ", SqlDbType.NChar, 40, "Modifier ");
cmd.Parameters.Add( "@Description ", SqlDbType.NChar, 40, "Description ");
cmd.Parameters.Add( "@sId ", SqlDbType.NChar, 40, "sId ");
cmd.Parameters[ "@sId "].Value = sId;
cmd.Parameters[ "@Rolename "].Value = Rolename;
cmd.Parameters[ "@ModifyDate "].Value = ModifyDate;
cmd.Parameters[ "@Modifier "].Value = modifier;
cmd.Parameters[ "@Description "].Value = Description;
cmd.ExecuteNonQuery();
ManageConn.freeConnection(conn);
[解决办法]
我给一个比较笨的方法,我在做的时候是采用这个方法的,大家不要笑啊.
定义一个变量;public static int num; 在DATAGRIDE的EDIT_COMMAND 事件中用num记录下当前的行数语句;num=(int)e.Item .ItemIndex ;,然后在更新按钮中加入更新代码即可.更新代码如下:(其中LoadDataBase是自定义的函数,用来打开数据库,声明了public SqlCommandBuilder objcmdBuilder;用来更新库,更新库后重新进行了绑定,以实现在DATAGRIDE中显示更新后的信息)
string MyComStr;
LoadDatebase();//打开数据库
MyComStr= "select login_id,password,admin_right,last_time from p_admin ";
sqlCommand1=new SqlCommand(MyComStr,this.myConnect);
sqlDataAdapter1=new SqlDataAdapter();
sqlDataAdapter1.SelectCommand=sqlCommand1;
sqlDataAdapter1.Fill(ClassDaSet, "p_signup ");
if (Text_2.Text .Trim ()== " "||Text_21.Text .Trim ()== " "||Text_2.Text .Trim ()!=Text_21.Text .Trim ())
{
System.Web.HttpContext.Current.Response.Write( " <script language=javascript> window.alert( '密码不能为空或者两次密码输入不一致! ') </script> ");
System.Web.HttpContext.Current.Response.End();
}
string code = Text_2.Text .Trim ();
string code1 = Text_3.Text .Trim ();;
//将得到的数据赋予数据集ClassDaSet相应的字段中,以备下面的更新语句写入数据库
ClassDaSet.Tables[ "p_signup "].Rows[yhgl_currentnum][1]=code;
ClassDaSet.Tables[ "p_signup "].Rows[yhgl_currentnum ][2]=code1;
//----------------------
objcmdBuilder = new SqlCommandBuilder(sqlDataAdapter1);
sqlDataAdapter1.UpdateCommand = objcmdBuilder.GetUpdateCommand();
try
{
sqlDataAdapter1.Update(ClassDaSet, "p_signup ");
}
catch(Exception e1)
{
//Label1.Text=e1.Message.ToString().Trim();
}
finally
{
myConnect.Close();
}
//Label1.Text= "cheng gong ";
//DataGrid1.EditItemIndex = -1;
ClassDaSet.Clear();
ClassDaSet.Dispose();
LoadDatebase();//打开数据库
MyComStr= "select login_id,password,admin_right,last_time from p_admin ";
sqlCommand1=new SqlCommand(MyComStr,this.myConnect);
sqlDataAdapter1=new SqlDataAdapter();
sqlDataAdapter1.SelectCommand=sqlCommand1;
sqlDataAdapter1.Fill(ClassDaSet, "p_signup ");
DataGrid1.DataSource=ClassDaSet.Tables[ "p_signup "].DefaultView;
DataGrid1.DataBind();
myConnect.Close();
ClassDaSet.Clear();
ClassDaSet.Dispose();
Text_1.Text = " ";
Text_2.Text = " ";
Text_21.Text = " ";
Text_3.Text = " ";
insert_button.Enabled =true;
update_button.Enabled =false;
Text_1.ReadOnly =false;
[解决办法]
for example:
表StudentDetails,三个字段,sno,sname,sage,显示在TextBox中,现在要对其进行更新..
由于sno是主键,所以只能对sname和sage进行更改..
示例代码如下:
SqlConnection con=new SqlConnection( "server=.;database=student;uid=sa;pwd=0421 ");
SqlCommand cmd=new SqlCommand( "update studentDetails set sname=@Sname,sage=@Sage where sno=@Sno ",con);
cmd.Parameters.AddWithValue( "@Sname ",this.TextBox1.Text.Trim());
cmd.Parameters.AddWithValue( "@Sage ",this.TextBox2.Text.Trim());
cmd.Parameters.AddWithValue( "@Sno ",Convert.ToInt32(this.TextBox3.Text.Trim()));
//打开数据库连接
con.Open();
//更新
cmd.ExecuteNonQuery();
//关闭数据库连接
con.Close();
[解决办法]
不用代码的话要用到SQLDATASOURCE这个控件,把参数加进去就号了
以下是HTML中的代码:
<asp:GridView ID= "GridView1 " runat= "server " AutoGenerateColumns= "False " BackColor= "White "
BorderColor= "#00C0C0 " BorderStyle= "None " BorderWidth= "1px " CellPadding= "4 " DataKeyNames= "ProjectID "
DataSourceID= "SqlDataSource1 " ForeColor= "Menu " GridLines= "Vertical " AllowPaging= "True " OnRowCancelingEdit= "GridView1_RowCancelingEdit " OnRowUpdating= "GridView1_RowUpdating " OnSelectedIndexChanged= "GridView1_SelectedIndexChanged " AllowSorting= "True " PageSize= "2 ">
<FooterStyle BackColor= "#CCCC99 " />
<Columns>
<asp:BoundField DataField= "ProjectID " HeaderText= "ProjectID " SortExpression= "ProjectID " />
<asp:BoundField DataField= "ProjectName " HeaderText= "ProjectName " SortExpression= "ProjectName " />
<asp:BoundField DataField= "FatherID " HeaderText= "FatherID " SortExpression= "FatherID " />
<asp:TemplateField FooterText= "23 ">
<EditItemTemplate>
<asp:Button ID= "Button1 " runat= "server " OnClick= "Button1_Click " Text= ' <%# Eval( "ProjectID ") %> ' />
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID= "Label1 " runat= "server " Text= ' <%# Eval( "ProjectID ", "{0:c} ") %> '> </asp:Label>
<asp:Label ID= "Label2 " runat= "server " Text= "yyy " Visible= "False "> </asp:Label>
<asp:TextBox ID= "TextBox1 " runat= "server "> eeeeeee </asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField HeaderText= "编辑 " ShowEditButton= "True " ShowHeader= "True " ShowSelectButton= "True " />
<asp:CheckBoxField HeaderText= "ee " SortExpression= "er " />
</Columns>
<RowStyle BackColor= "#F7F7DE " />
<SelectedRowStyle BackColor= "#CE5D5A " Font-Bold= "True " ForeColor= "White " />
<PagerStyle BackColor= "#F7F7DE " ForeColor= "Black " HorizontalAlign= "Right " />
<HeaderStyle BackColor= "#6B696B " Font-Bold= "True " ForeColor= "White " />
<AlternatingRowStyle BackColor= "White " />
</asp:GridView>
后台代码完全不需要写1个字