C# 数据存储切割输入

     2023-04-11     200

关键词:

【中文标题】C# 数据存储切割输入【英文标题】:C# data storing cut the inputs 【发布时间】: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 谢谢 【参考方案1】:

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

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

【讨论】:

嗯,这很奇怪。您是否设置了断点来检查传递给命令的参数? 谢谢,它有效,我的第一次尝试是调试数据库文件,该文件在运行时被删除:D 您是否尝试过为存储过程中的变量显式设置适当的值并从 ssm 执行插入查询?当你这样做时,表格中会插入什么?

c#图片切割图片压缩缩略图生成

C#图片切割、图片压缩、缩略图生成的实现代码///图片切割函数 ///</summary> ///<paramname="sourceFile">原始图片文件</param> ///<paramname="xNum">在X轴上的切割数量</param> ///<paramname="yNum" 查看详情

SharedMemory.BufferReadWrite 破坏(切割)数据

】SharedMemory.BufferReadWrite破坏(切割)数据【英文标题】:SharedMemory.BufferReadWritecorrupting(cutting)data【发布时间】:2021-01-1509:39:15【问题描述】:我正在尝试使用SharedMemory包在两个用C#.Net3.5编写的C#应用程序之间共享数据(遗憾的是... 查看详情

C# 记录麦克风输入并将其存储在字节数组中,而不是本地存储

】C#记录麦克风输入并将其存储在字节数组中,而不是本地存储【英文标题】:C#Recordmicrophoneinputandstoreitinarrayofbytesinsteadoflocalstorage【发布时间】:2013-06-2517:14:34【问题描述】:我正在尝试记录我的麦克风输入,而不是将记录保... 查看详情

p1298(矩阵切割)dp

...一直切割到另一边。对得到的矩形再分别进行切割。输入数据:输入文件中包含两个正整数,代表矩形的边长,每边长均在1—100之间。输出数据:输出文件包含一行,显示出你的程序得到的最理想的正方形数目。输入输出示例... 查看详情

c#如何调用此存储过程

...@@@@@鄙视刷分不回答问题的人哈@@@@@@在使用.net的过程中,数据库访问是一个很重要的部分,特别是在b/s系统的构建过程中,数据库操作几乎成为了一个必不可少的操作。调用存储过程实现数据库操作使很多程序员使用的方法,而... 查看详情

通过在 C# 中切割边缘从图像中提取对象

】通过在C#中切割边缘从图像中提取对象【英文标题】:ExtracttheobjectfromtheimagebycuttingtheedgesinC#【发布时间】:2012-08-1219:42:26【问题描述】:我正在尝试使用AForge.net从图像的背景中裁剪对象。我已经使用cannyEegeDetector检测到对象的... 查看详情

如何使用来自 c# 的 MySQL 存储过程将表作为输入发送到存储过程?我有 T-SQL 工作

】如何使用来自c#的MySQL存储过程将表作为输入发送到存储过程?我有T-SQL工作【英文标题】:HowdoIuseaMySQLstoredprocedurefromc#whichsendsatableasinputtothestoreprocedure?IhaveT-SQLworking【发布时间】:2015-04-1410:41:24【问题描述】:在Transact-SQL中,... 查看详情

C# 存储过程不会保存数据

】C#存储过程不会保存数据【英文标题】:C#storedprocedurewon\'tsavedata【发布时间】:2021-09-3022:17:19【问题描述】:我已经编写了一个存储过程来存储我的表单数据,虽然我没有收到任何错误但我的数据不会保存在数据库中。代码:... 查看详情

C#:如何找到函数内数组的总和?

...必须创建一个函数,使我能够为五金店中的每个客户输入数据。我应该为每个客户输入的数据是:名字、姓氏、购买的产品及其价格。此数据应存储在数组中。让这个函数声明一个1D容器,让用户用上述数据初始化这个1D容器,... 查看详情

c#提供两种切割圆形图片的方式

效果:privatevoidForm1_Load(objectsender,EventArgse){stringfile=System.IO.Path.Combine(Environment.CurrentDirectory,@"11.jpg");try{Imagei=newBitmap(file);pbO.Image=i;pbD1.Image=WayOne(file);pbD2.Image=Wa 查看详情

存储来自 C# 应用程序的数据

】存储来自C#应用程序的数据【英文标题】:StoredatafromaC#application【发布时间】:2010-09-0609:51:59【问题描述】:我最近开始学习一些C#并编写了一个Yahtzee克隆。我的下一步(现在游戏逻辑已经到位并正常运行)是整合一些方法来... 查看详情

存储多行存储过程数据以便稍后在 c# 中循环遍历行

】存储多行存储过程数据以便稍后在c#中循环遍历行【英文标题】:storingmultirowstoredproceduredatatoloopthroughrowslaterinc#【发布时间】:2021-05-2419:10:18【问题描述】:我有一个将返回多行数据的存储过程。在我的示例中,我们使用了执... 查看详情

C#:使用存储过程从数据库中读取图像

】C#:使用存储过程从数据库中读取图像【英文标题】:C#:Readanimagefromthedatabaseusingastoredprocedure【发布时间】:2012-10-0810:34:21【问题描述】:我一直在尝试使用存储过程读取图像文件。下面给出的是获取图像文件的存储过程。CREAT... 查看详情

是否可以使用 C# 在 ArrayList 中存储多种数据类型?

】是否可以使用C#在ArrayList中存储多种数据类型?【英文标题】:IsitpossibletostoremultipledatatypesinanArrayListusingC#?【发布时间】:2012-10-1811:39:28【问题描述】:在C#中,我可以在ArrayList中存储多种数据类型吗?喜欢;myArrayList.Add(false);my... 查看详情

用c#实现图片数据库存储与显示

 在网络上查找了一些资料,对C#实现图片的数据库存储与显示作个总结!所有代码都可以直接复制运行。准备数据库,在SQL2000数据库的pubs数据库中建立一个ImageStore数据表,字段有ImgID,ImageData,ImageContentType,ImageDescription,ImageSiz... 查看详情

c#中两种不同的存储过程调用与比较

...些SQL语句和控制语句组成的被封装起来的过程,它驻留在数据库中,可以被客户应用程序调用,也可以从另一个过程或触发器调用。它的参数可以被传递和返回。与应用程序中的函数过程类似,存储过程可以通过名字来调用,而... 查看详情

c#数据类型

1.整数类型: int  只能存储证书,不能存储小数。2.小数类型:doubie机能存储整数,也能存储小数,小数点后面的额15-16位。3.金钱类型:decimal:用来存储金钱,值后面需要家一个m。4.字符串类型:string用来存储多个文... 查看详情

在 C# 中以通用存储库模式调用数据库视图

】在C#中以通用存储库模式调用数据库视图【英文标题】:CallDatabaseViewinGenericrepositorypatterninC#【发布时间】:2021-03-2006:55:42【问题描述】:我在WebAPIC#(.NetFramework4.7.2)中使用通用存储库模式,数据库为postgresql。我想使用通用存储... 查看详情