我正在使用ASP.NET(C#),我有代码将新行插入数据库。当我运行它时,我收到错误“输入字符串格式不正确”。
我认为我已将此错误缩小到用户GUID uniqueidentifier,需要将其传递给insert语句。 (从asp:login创建)
我知道我可以使用Membership.GetUser(User.Identity.Name).ProviderUserKey.ToString()
来呼叫此UserID
但后来我需要使用new Guid(string)
这对我来说似乎不起作用。这是我的代码隐藏:你能发现任何错误吗?
public partial class LoggedIn_CreateDoc : System.Web.UI.Page
{
SqlConnection sqlConn;
SqlDataAdapter sqlDA;
DataSet ds;
String strConn = ConfigurationManager.ConnectionStrings["1722555Connection"].ConnectionString;
protected void createDoc_Click(object sender, EventArgs e)
{
SqlConnection connection = new SqlConnection();
connection.ConnectionString = ConfigurationManager.ConnectionStrings["1722555Connection"].ConnectionString;
connection.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = connection;
cmd.CommandTimeout = 0;
string commandText = "INSERT INTO Documents (Name, Description, RcdID, Location, AccessLevel, DateCreated, AuthorID, DocStatus, EngStatus, QaStatus, DesignStatus) VALUES(@Name, @Description, @RCD, @Location 1, @Date, @AuthorID, 1, 1, 4, 4)";
cmd.CommandText = commandText;
cmd.CommandType = CommandType.Text;
cmd.Parameters.Add("@Name", SqlDbType.VarChar, 50);
cmd.Parameters.Add("@Description", SqlDbType.VarChar, 300);
cmd.Parameters.Add("@RCD", SqlDbType.Int);
cmd.Parameters.Add("@Location", SqlDbType.Int);
cmd.Parameters.Add("@Date", SqlDbType.DateTime);
cmd.Parameters.Add("@AuthorID", SqlDbType.UniqueIdentifier);
cmd.Parameters["@Name"].Value = TextBoxDocTitle.Text;
cmd.Parameters["@Description"].Value = TextBoxDocDescription.Text;
cmd.Parameters["@RCD"].Value = ListBoxSeries.DataValueField;
cmd.Parameters["@Location"].Value = ListBoxLocation.DataValueField;
cmd.Parameters["@Date"].Value = DateTime.Now;
cmd.Parameters["@AuthorID"].Value = new Guid(Membership.GetUser(User.Identity.Name).ProviderUserKey.ToString());
cmd.ExecuteNonQuery();
connection.Close();
Response.Write(@"<script language='javascript'>alert('Your new document has been created. \n You can now find it in your Task Panel!');</script>");
Response.Redirect("TaskPanel.aspx");
}
}
答案 0 :(得分:2)
我认为问题不在于你ProviderUserKey
。演员阵容不会失败 - 插入会失败。
您是否需要将RCD
和Location
转换为int值?您当前正在尝试将字符串传递给int字段。
您应该使用ListBox.SelectedValue
从这些字段中检索所选值,之后您可以使用Int32.TryParse
将它们转换为整数(如果您想要抛出异常,则使用Int32.Parse
演员失败)。
ListBox.DataValueField
不用于从ListBox
中检索所选值,而是告诉它应该将绑定数据源中的哪个字段视为其值,并且 - 因此 - 它是字段的名称,而不是其中的值。
答案 1 :(得分:0)
您应该检查以查看为所有cmd.Parameters分配的值,并确保这些值与数据库中列的数据类型和限制一致。