求高手解答uniqueidentifier的问题

bestwolf1983 2008-09-17 02:51:58
大家好!我有一个GridView控件,需要自定义删除的sql语句为一个名为DeleteUser的存储过程,该过程通过获取OnRowDeleting事件中传入的e.RowIndex的UserId字段的值来确定删除的行,该UserId字段是一个uniqueidentifier属性的字段
sqlDataSource数据源的代码如下:


<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:sper_lvyouConnectionString1 %>"
SelectCommand="
SELECT a.UserId,a.UserName, b.Password, b.Email, b.PasswordQuestion,b.PasswordAnswer, b.CreateDate
FROM dbo.aspnet_Users as a INNER JOIN
dbo.aspnet_Membership as b ON b.UserId = a.UserId
ORDER By
b.CreateDate desc" DeleteCommand="DeleteUser" OnDeleting="SqlDataSource1OnDeleting" DeleteCommandType="StoredProcedure">

<%--
</asp:SqlDataSource>

code=C#]
protected void GridView1OnRowDeleting(Object sender,GridViewDeleteEventArgs e)
{
ViewState["UserId"] = GridView1.Rows[e.RowIndex].Cells[0];
}
protected void SqlDataSource1OnDeleting(Object sender,SqlDataSourceCommandEventArgs e)
{
SqlParameter deleteKey = new SqlParameter("@UserId", SqlDbType.UniqueIdentifier);
// deleteKey.Value = (Guid)ViewState["UserId"];
e.Command.Parameters.Add(deleteKey);
// e.Command.Parameters["@UserId"].Value = ViewState["UserId"].ToString();

}[[/code]

存储过程:
CREATE PROCEDURE [dbo].[DeleteUser]
@UserId uniqueidentifier
AS
BEGIN
Delete From dbo.aspnet_Membership Where [UserId]=@UserId
Delete From dbo.aspnet_Users Where [UserId]=@UserId
END
GO

哪位高人对我所说的情况比较清楚,忘指点一二,客户逼着要交货,着急ing
...全文
255 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
bestwolf1983 2008-09-18
  • 打赏
  • 举报
回复
楼上的,我这样写:
protected void GridView1OnRowDeleting(Object sender,GridViewDeleteEventArgs e)
{
ViewState["UserId"] = GridView1.Rows[e.RowIndex].Cells[0].ToString();
}
protected void SqlDataSource1OnDeleting(Object sender,SqlDataSourceCommandEventArgs e)
{
SqlParameter deleteKey = new SqlParameter("@UserId", SqlDbType.UniqueIdentifier);
deleteKey.Value = new Guid(ViewState["UserId"].ToString());
e.Command.Parameters.Add(deleteKey);

}
结果还是不行啊:
Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).
我的GridView是这样的:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataSourceID="SqlDataSource1" AllowPaging="True" AllowSorting="True"
AutoGenerateDeleteButton="true" OnRowDeleting="GridView1OnRowDeleting">
<Columns>
<asp:BoundField DataField="UserId" HeaderText="UserId"
SortExpression="UserId" />
<asp:BoundField DataField="UserName" HeaderText="UserName"
SortExpression="UserName" />
<asp:BoundField DataField="Password" HeaderText="Password"
SortExpression="Password" />
<asp:BoundField DataField="Email" HeaderText="Email" SortExpression="Email" />
<asp:BoundField DataField="PasswordQuestion" HeaderText="PasswordQuestion"
SortExpression="PasswordQuestion" />
<asp:BoundField DataField="PasswordAnswer" HeaderText="PasswordAnswer"
SortExpression="PasswordAnswer" />
<asp:BoundField DataField="CreateDate" HeaderText="CreateDate"
SortExpression="CreateDate" />

</Columns>
</asp:GridView>
stning 2008-09-18
  • 打赏
  • 举报
回复
如果你的值是正确的Guid格式,是可以转的。11楼的也说了
北京的雾霾天 2008-09-18
  • 打赏
  • 举报
回复
关键是看你的值是什么类型的,如果是字符串类型的且能正确的表示为Guid的字符串形式,可以使用 new Guid(strng)来获取这个GUID,如果是不可以表示为Guid的字符串,那怎样都是不能转换的。
bestwolf1983 2008-09-18
  • 打赏
  • 举报
回复
回楼上的,我用的是sqldatasource,怎么获取绑定的datatable?翻了半天msdn也没找到啊
bbbbbb888888 2008-09-18
  • 打赏
  • 举报
回复
dataset 绑定.gridview
smx717616 2008-09-18
  • 打赏
  • 举报
回复
你应该用datatable的字段转换为guid。也就是说和gridview1绑定的datatable
bestwolf1983 2008-09-18
  • 打赏
  • 举报
回复
回复楼上的
我这样写:
ViewState["UserId"] = (Guid)GridView1.Rows[e.RowIndex].Cells[0];出错
无法将类型“System.Web.UI.WebControls.TableCell”转换为“System.Guid”
该怎么办啊?求救啊!
smx717616 2008-09-18
  • 打赏
  • 举报
回复
ViewState["UserId"] = GridView1.Rows[e.RowIndex].Cells[0];
你的这句话问题。
ViewState["UserId"]里面存放的是cells对象。
bestwolf1983 2008-09-18
  • 打赏
  • 举报
回复
有没有人知道啊?大家帮帮忙
bestwolf1983 2008-09-18
  • 打赏
  • 举报
回复
找到问题所在了,10楼11楼的两位仁兄是正解
bestwolf1983 2008-09-17
  • 打赏
  • 举报
回复
回楼上的,主要的问题是无法将viewState["UserId"]的值转化为一个Guid对象
ViewState["UserId"] = GridView1.Rows[e.RowIndex].Cells[0].ToString()只能保留文本无法将其抓换为Guid对象
cpio 2008-09-17
  • 打赏
  • 举报
回复
看看ViewState["UserId"]是什么值,可不可以转成GUID
北京的雾霾天 2008-09-17
  • 打赏
  • 举报
回复
如果ViewState["UserId"]的值是空值(DBNull.Value)可能就出这种错误了。

试着这样做一下:

if (ViewState["UserId"] is Guid)
{
deleteKey.Value = (Guid)ViewState["UserId"];
}
bestwolf1983 2008-09-17
  • 打赏
  • 举报
回复
额,刚才没有说清楚,CSDN竟然不允许维护自己发的帖子,汗~~,该段代码最主要的问题是在类型转换上,deleteKey.Value = (Guid)ViewState["UserId"]; 这句,总是无法将uniqueidentifier转化为合适的数据类型

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧