gpt4 book ai didi

c# - 无法使用 TableAdapter 启用约束

转载 作者:行者123 更新时间:2023-11-29 22:14:07 35 4
gpt4 key购买 nike

每次在 TextBox 中输入字符时,我都会尝试检查表中是否存在用户名。这是我的代码:

register.aspx.cs 文件中,我在 TextBox 上有一个 TextChanged 事件:

protected void username_txt_TextChanged(object sender, EventArgs e)
{
string check = authentication.checkUsername(username_txt.Text);

if(check == "false")
{
username_lbl.Text = "Available";
}
else
{
username_lbl.Text = "Not Available";
}
}

它调用这个方法:

public static string checkUsername(string Username)
{
userInfoTableAdapters.usersTableAdapter userInfoTableAdapters = new userInfoTableAdapters.usersTableAdapter();
DataTable userDataTable = userInfoTableAdapters.checkUsername(Username);
DataRow row = userDataTable.Rows[0];
int rowValue = System.Convert.ToInt16(row["Users"]);

if (rowValue == 0)
{
return "false";
}
else
{
return "true";
}
}

正在执行的查询是:

SELECT COUNT(username) AS Users FROM users WHERE (username = @Username)

由于某种原因,它一直在这条线上中断:

DataTable userDataTable = userInfoTableAdapters.checkUsername(Username);

它给出了一个错误:

Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.

以防万一,我的表中的用户名字段是唯一的且不为空,我尝试过仅执行查询本身,并且它运行良好,因此它不在查询末尾。

有人明白我做错了什么吗?

最佳答案

您的查询不会返回行 - 因此在这种情况下使用返回 DataTableTableAdapter 查询是不合适的。

我建议您使用类似于下面的函数的查询。我冒昧地实际上返回了 bool 值......

public static bool checkUsername(string userName)
{

SqlClient.SqlCommand withCmd = new SqlClient.SqlCommand();

bool result = false;

withCmd.Connection.Open();

withCmd.CommandType = CommandType.text;
withCmd.CommandText = "SELECT COUNT(username) AS Users FROM users WHERE (username = @Username)"
withCmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Username", System.Data.SqlDbType.VarChar, 16)).Value = userName;

try {
int intResult;
object scalarResult = withCmd.ExecuteScalar();
if ((scalarResult != DBNull.Value)
&& (scalarResult != null)
&& (int.TryParse(scalarResult, out intResult)))
result = (intResult==1);
} catch (Exception ex) {
result = false; // hmm, bad...can't tell handle error...
} finally {
// only close if we opened the connection above ...
withCmd.Connection.Close();
}
}

return result;
}

TableAdapter 确实支持对表对象进行标量查询,当您添加并命名查询时,请检查该查询的属性并确保其 ExecuteMode 为标量。然后它将返回整数值,而不是行!

TableAdapter with Scalar Query showing properties

另一方面,如果您想保留结构,请更改查询以实际返回,例如

从用户 WHERE 中选择 uu.* AS dbo.Users uu(用户名 = @Username)

并使 checkUsername() 函数的结果取决于返回的行数(应该是 1 或零......)

关于c# - 无法使用 TableAdapter 启用约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31358430/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com