【问题标题】:Insert command not working on connection between C# and SQL Server插入命令不适用于 C# 和 SQL Server 之间的连接
【发布时间】:2013-06-30 23:26:22
【问题描述】:

我在 SQL Server 中有这张表:

CREATE TABLE Ciudadano (  
ci int not null,  
Nombre varchar(50),  
Apellido varchar(50),  
Correo varchar(50),  
Usuario varchar(50), 
 Contrasena varchar(50),  
Localidad_cod int,  
Primary key (ci)  
)

我正在尝试使用名为 sp_ConsultarCuenta 的存储过程从 Visual Studio c# 向表 Ciudadano 添加数据:

CREATE PROCEDURE sp_ConsultarCuenta
   @ci int, @nom varchar(50), @ape varchar(50), @user varchar(50), 
   @pass varchar(50), @correo varchar(50), @loc varchar(50)
AS
   IF NOT EXISTS(SELECT ci,Usuario FROM Ciudadano 
                 WHERE ci = @ci OR Usuario = @user)
      DECLARE @var varchar(50)
      SET @var = (SELECT cod From Localidad Where Nombre = @loc)

      INSERT INTO Ciudadano (ci, Nombre, Apellido, Correo, Usuario, Contrasena, Localidad_cod)
      VALUES (@ci, @nom, @ape, @user, @pass, @correo, @var)

在我的 c# 代码中,我有这个:

public void AgregarCiudadano()
{
   string con = @"Data Source=(local);Initial Catalog=SistemaDeQuejas;Trusted_Connection=True";
   SqlConnection conexion = new SqlConnection(con);

   conexion.Open();
   SqlDataAdapter Comando = new SqlDataAdapter();

   Comando.InsertCommand = conexion.CreateCommand();
   Comando.InsertCommand.CommandText = "sp_ConsultarCuenta";
   Comando.InsertCommand.CommandType = CommandType.StoredProcedure;
   Comando.InsertCommand.Connection = conexion;

   Comando.InsertCommand.Parameters.Add("@ci", SqlDbType.Int).Value = System.Convert.ToInt32(ci);
   Comando.InsertCommand.Parameters.Add("@nom", SqlDbType.VarChar, 50).Value = Nombre;
   Comando.InsertCommand.Parameters.Add("@ape", SqlDbType.VarChar, 50).Value = Apellido;
   Comando.InsertCommand.Parameters.Add("@user", SqlDbType.VarChar, 50).Value = Usuario;
   Comando.InsertCommand.Parameters.Add("@pass", SqlDbType.VarChar, 50).Value = Contrasena;
   Comando.InsertCommand.Parameters.Add("@correo", SqlDbType.VarChar, 50).Value = Correo;
   Comando.InsertCommand.Parameters.Add("@loc", SqlDbType.VarChar, 50).Value = Localidad;

   conexion.Close();  
}

我正在做的是一个 Web 表单,该方法由表单上的按钮调用。但是当我运行它并按下按钮时,它不会抛出任何错误,但我试图插入数据库表的数据根本没有插入。我的代码有问题吗?

【问题讨论】:

标签: c# sql-server visual-studio-2010 stored-procedures sql-insert


【解决方案1】:

c您可以这样做以简单的方式运行您的插入命令

using(var connection = new SqlConnection(connectionString))
{
   connection.Open();

   using (var command = new SqlCommand("sp_ConsultarCuenta", connection))
   {
        command.Parameters.AddWithValue("@Nombre", params.Nombre);

        command.CommandType = CommandType.StoredProcedure;

        command.ExecuteNonQuery();
   }

   connection.Close();
 }

【讨论】:

  • 这有点粗糙。我可能会创建一个通用方法来处理我的命令,然后将过程名称与参数值列表一起传递。
  • 我刚刚运行了你的代码,它抛出了以下错误:Error converting data type nvarchar to int。在command.ExecuteNonQuery();行
  • 在您的参数中使用正确的数据类型。我认为您的 Nombre 字段是一个数字,并且您正试图在其中提供 nvarchar 。让我知道是不是这样。
  • 进展如何?别忘了告诉我们:)。
  • 您好,抱歉我没有早点回答,我正忙于其他事情。我的 Nombre 字段实际上是一个 varchar 字段,意思是“名称”,但在这种情况下我的数字字段是“ci”。我应该如何放置它们?
猜你喜欢
  • 2014-02-15
  • 2012-05-02
  • 1970-01-01
  • 2016-03-10
  • 2018-12-27
  • 1970-01-01
  • 2017-03-04
  • 1970-01-01
  • 2023-04-10
相关资源
最近更新 更多