C# 数据存储剪切输入

C# data storing cut the inputs

我有将我的表单输入存储到数据库的功能,但问题是它在存储它们时切断了所有单个字母的输入。

例如: 如果我写 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)
);

有什么想法吗?

您需要调整存储过程变量的长度以匹配 table。

    CREATE PROCEDURE [dbo].[InsertUser]
        @Name VARCHAR(100),
        @UserType VARCHAR(100),
        @Password VARCHAR(100),
        @UserName VARCHAR(100),
        @Phone VARCHAR(100) = null,
        @IdCard VARCHAR(100) = null
    AS
        begin
        INSERT into Users(Name, UserType, Password, UserName, Phone, IdCard) values (@Name,@UserType,@Password,@UserName, @Phone, @IdCard);
        end

   using (SqlCommand cmd = new SqlCommand("dbo.InsertUser", cn))
    {
        if (nameInput.Text != "" && passwordLableG.Text != "" && usernameLableG.Text != "")
        {
            cmd.Parameters.Add("@UserType", SqlDbType.VarChar).Value = typeLAbleG.SelectedItem;             
            cmd.Parameters.Add("@Name", SqlDbType.VarChar).Value = nameInput.Text;              
            cmd.Parameters.Add("@Password", SqlDbType.VarChar).Value = passwordLableG.Text;             
            cmd.Parameters.Add("@UserName", SqlDbType.VarChar).Value = usernameLableG.Text;             
            cmd.Parameters.Add("@Phone", SqlDbType.VarChar).Value = phoneLableG.Text;               
            cmd.Parameters.Add("@IdCard", SqlDbType.VarChar).Value = idCardLableG.Tex;              
            cmd.ExecuteNonQuery();
            cn.Close();
            MessageBox.Show("Successfully Saved");
        }
    }