private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
string strComm,strConn;
strConn = "server=jiang;uid=sa;pwd=;database=Test";
strComm = "Select * From Student";
SqlConnection conn = new SqlConnection(strConn);
conn.Open ();
SqlCommand myComm = new SqlCommand (strComm,conn);
SqlDataAdapter myAdapter = new SqlDataAdapter ();
DataSet myDataSet = new DataSet ();
myAdapter.SelectCommand = myComm;
myAdapter.Fill (myDataSet,"Student");
conn.Close ();
SqlCommandBuilder myCommandBuild = new SqlCommandBuilder (myAdapter);

foreach(DataRow rowIndex in myDataSet.Tables["Student"].Rows )
{
if(rowIndex["grade"].ToString()=="34")
rowIndex.Delete();
Response.Write(rowIndex["grade"].ToString()+"<br>");
}
//string [] addNew = new string [1]{"aaa"};
//myDataSet.Tables ["Student"].Rows .Add (addNew);
myAdapter.Update (myDataSet,"Student");
studentGrid.DataSource = myDataSet.Tables [0];
studentGrid.DataBind ();
}在foreach循环中条件符合都不可以删除,grade是char,10
但是我用列是Name是又可以,Name是varchar,50,
ToString应该可以把数据库所有的类型转成String的吧?
为什么不可以?

解决方案 »

  1.   

    Delete方法实际上不是从DataTable中删除掉一行,而是将其标志为删除,仅仅是做个记号,而Remove
    方法则是真正的从DataRow中删除一行,RemoveAt方法是根本行的索引来删除
      

  2.   

    不过我改成这样是可以做删除功能的啊
    foreach(DataRow rowIndex in myDataSet.Tables["Student"].Rows )
    {
    if(rowIndex["Name"].ToString()=="conan")
    rowIndex.Delete();
    }
    Name和age的区别紧是定义的类型不同罢了!
      

  3.   

    用ToString()方法只能将不为DBNull的值转换成字符串,如果该字段的值为Null那么用这个方法转换将出错,可以用Convert.ToString()来做转换就不会出错了,或是用Convert.IsDbNull来先做判断
      

  4.   

    但我的表是有值的,我不明白的是同样的语句为什么在varchar的值上可以实现,但是在char上不可以呢
      

  5.   

    晕啊,我刚才试过了用rowIndex.Remove();原来DataRow当中根本没有这个方法
      

  6.   

    char型的数据在字符串长度没有达到指定的长度时会自动添加空格,所以可能是你的判断条件有问题if(rowIndex["grade"].ToString().Trim()=="34")