【发布时间】:2021-10-09 05:08:46
【问题描述】:
我有将表单输入存储到数据库的功能,但问题是它在存储它们时将所有输入截断为单个字母。
例如:如果我写 Tom 的名称,它只保存 t。我的表单中的所有输入都会发生这种情况。
Code
try
{
using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["MYAPPDatabaseString"].ConnectionString))
{
if (cn.State == ConnectionState.Closed)
cn.Open();
using (SqlCommand cmd = new SqlCommand("dbo.InsertUser", cn))
{
if (nameInput.Text != "" && passwordLableG.Text != "" && usernameLableG.Text != "")
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@UserType", typeLAbleG.SelectedItem); // <-- only stores first letter of input
cmd.Parameters.AddWithValue("@Name", nameInput.Text); // <-- only stores first letter of input
cmd.Parameters.AddWithValue("@Password", passwordLableG.Text); // <-- only stores first letter of input
cmd.Parameters.AddWithValue("@UserName", usernameLableG.Text); // <-- only stores first letter of input
cmd.Parameters.AddWithValue("@Phone", phoneLableG.Text); // <-- only stores first letter of input
cmd.Parameters.AddWithValue("@IdCard", idCardLableG.Text); // <-- only stores first letter of input
cmd.ExecuteNonQuery();
cn.Close();
MessageBox.Show("Successfully Saved");
}
}
}
}
catch (SqlException ex)
{
StringBuilder errorMessages = new StringBuilder();
for (int i = 0; i < ex.Errors.Count; i++)
{
errorMessages.Append("Index #" + i + "\n" +
"Message: " + ex.Errors[i].Message + "\n" +
"LineNumber: " + ex.Errors[i].LineNumber + "\n" +
"Source: " + ex.Errors[i].Source + "\n" +
"Procedure: " + ex.Errors[i].Procedure + "\n");
}
Console.WriteLine(errorMessages.ToString());
}
这是我的Stored Procedure
CREATE PROCEDURE [dbo].[InsertUser]
@Name VARCHAR,
@UserType VARCHAR,
@Password VARCHAR,
@UserName VARCHAR,
@Phone VARCHAR = null,
@IdCard VARCHAR = null
AS
begin
INSERT into Users(Name, UserType, Password, UserName, Phone, IdCard) values (@Name,@UserType,@Password,@UserName, @Phone, @IdCard);
end
这是我的table schema
CREATE TABLE [dbo].[Users] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[UserType] VARCHAR (100) NOT NULL,
[Name] VARCHAR (100) NOT NULL,
[Password] VARCHAR (100) NOT NULL,
[UserName] VARCHAR (100) NOT NULL,
[Phone] VARCHAR (100) NULL,
[IdCard] VARCHAR (100) NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);
有什么想法吗?
【问题讨论】:
-
也许您存储过程的输入参数应该是 varchar(100) 而不仅仅是 varchar。
-
是的,我发布后就看到了。
-
我会选择下面的答案。
-
@David.Warwick 不幸的是,将
(100)添加到我的程序中并没有解决问题。 -
@David.Warwick 下面的答案是修复我刚刚在调试文件中制作的代码:D 谢谢
标签: c# sql winforms stored-procedures