首页 > 解决方案 > C# 数据存储切割输入

问题描述

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

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

任何的想法?

标签: c#sqlwinformsstored-procedures

解决方案


您将需要调整存储过程变量长度以与表匹配。

    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");
        }
    }

推荐阅读