我创建了一个GridView,目的实现与数据库中的数据绑定。并增加了删除按钮,以便单击哪行删除按钮就可以删除改数据库所有对应的记录数据。但是,却发生了一个 将字符串转换为 uniqueidentifier 时失败 的异常 ,不明白,请高手指教~!代码如下: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 Admin_ManageUser : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        GvUser();
    }    public void GvUser()
    {
        DataSet ds = new DataSet();
        string sConnectionString = @"server=(local)\SQLEXPRESS;database=Form;Trusted_Connection=True";
        using(SqlConnection conn = new SqlConnection(sConnectionString))
        {
            SqlDataAdapter da = new SqlDataAdapter("select * from tbUser",conn);
            da.Fill(ds);
        }
        gv_User.DataSource=ds;
        gv_User.DataBind();
    }    protected void gv_User_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Del")
        {
            int iIndex = Convert.ToInt16(e.CommandArgument);
            string sUserID = gv_User.DataKeys[iIndex].ToString();
            string sConnectionString = @"server=(local)\SQLEXPRESS;database=Form;Trusted_Connection=True";
            string sSql = "Delete from tbUser where UserID = @UserID";
            using (SqlConnection conn = new SqlConnection(sConnectionString))
            {
                conn.Open();
                using (SqlCommand cmd = new SqlCommand(sSql, conn))
                {
                    cmd.Parameters.AddWithValue("@UserID", sUserID);
                    ClientScript.RegisterStartupScript(Page.GetType(),"",string.Format("<script>alert('删除了{0}条记录');</script>",cmd.ExecuteNonQuery()));
                    SetBind();
                }
            }
        }
    }    private void SetBind()
    {
        DataSet ds = new DataSet();
        string sConnection = @"server=(local)SQLEXPRESS;database=Form;Trusted_Connection=True";
        using (SqlConnection conn = new SqlConnection(sConnection))
        {
            SqlDataAdapter da = new SqlDataAdapter("select * from tbUser",conn);
            da.Fill(ds);
        }
        gv_User.DataSource = ds;
        gv_User.DataBind();
    }
}
这是发生的异常信息:“/Forum”应用程序中的服务器错误。
--------------------------------------------------------------------------------将字符串转换为 uniqueidentifier 时失败。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.SqlClient.SqlException: 将字符串转换为 uniqueidentifier 时失败。源错误: 
行 45:                 {
行 46:                     cmd.Parameters.AddWithValue("@UserID", sUserID);
行 47:                     ClientScript.RegisterStartupScript(Page.GetType(),"",string.Format("<script>alert('删除了{0}条记录');</script>",cmd.ExecuteNonQuery()));
行 48:                     SetBind();
行 49:                 }
 源文件: e:\Projects\Forum\Admin\ManageUser.aspx.cs    行: 47 堆栈跟踪: 
[SqlException (0x80131904): 将字符串转换为 uniqueidentifier 时失败。]
   System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) +95
   System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) +82
   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) +346
   System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +3430
   System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +186
   System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) +1139
   System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) +334
   System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe) +407
   System.Data.SqlClient.SqlCommand.ExecuteNonQuery() +149
   Admin_ManageUser.gv_User_RowCommand(Object sender, GridViewCommandEventArgs e) in e:\Projects\Forum\Admin\ManageUser.aspx.cs:47
   System.Web.UI.WebControls.GridView.OnRowCommand(GridViewCommandEventArgs e) +96
   System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup) +121
   System.Web.UI.WebControls.GridView.RaisePostBackEvent(String eventArgument) +215
   System.Web.UI.WebControls.GridView.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +31
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +32
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +244
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3839 

解决方案 »

  1.   

    cmd.Parameters.AddWithValue("@UserID", sUserID);
    你的表里UserID列是uniqueidentifier类型吧
      

  2.   

    cmd.Parameters.AddWithValue("@UserID", sUserID);
    设置参数类型。确保sUserID可以被转化为uniqueidentifier
      

  3.   

    感觉这里有问题:gv_User的DataKeys只要填UserID就可以了。不太明白这意思。
    int iIndex = Convert.ToInt16(e.CommandArgument);
    string sUserID = gv_User.DataKeys[iIndex].ToString();sUserID是如果INT型的,转换下看看。提示是字符转换失败,主要是主键的转换。
      

  4.   

    你的参数userid  肯定不符合GUID的格式
      

  5.   

    UserID                                  UserName UserPassword  UserEmail
    a2ac9d38-41bf-4172-ac0d-e9219b679567 小王  1        [email protected] 
          UserGender  UserFace      UserIsMarried
    1   01.jpg False
    4eb22e4b-1d2a-4037-93f7-cb7b56b95d4a 小朱  1        [email protected]  1   02.jpg False
    这是我数据库中数据~!
      

  6.   

    ...
    string sUserID = gv_User.DataKeys[iIndex].Value.ToString();
    ...
      

  7.   

    哦 原来是落了一个VALUE属性 汗 已解决了