0

我有這個表中的SQL Server之間的連接:Insert命令不工作的C#和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) 
) 

我試圖將數據從Visual Studio C#添加到表Ciudadano,使用調用的存儲過程sp_ConsultarCuenta

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表單,該方法由表單上的按鈕調用。但是,當我運行它,並按下按鈕它不會引發任何錯誤,但我試圖插入到數據庫表中的數據根本沒有插入。我的代碼有問題嗎?

+0

旁註:你應該** **不使用'sp_'前綴爲您的存儲過程。微軟已經保留了這個前綴以供自己使用(參見*命名存儲過程*)](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx),以及你將來有可能冒着名字衝突的風險。 [這對你的存儲過程性能也是不利的](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)。最好只是簡單地避免使用'sp_'並將其他內容用作前綴 - 或者根本沒有前綴! –

+0

謝謝marc_s ...其實並不知道! – MSI

回答

2

CYOU可以做到這一點,以一種簡單的方式運行插入命令

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(); 
} 
+0

這有點粗俗。我可能會創建一個通用方法來處理我的命令,然後只傳遞過程名稱和參數值列表。 – MSI

+0

我剛剛運行了你的代碼,它會拋出以下錯誤:'將數據類型nvarchar轉換爲int時出錯。在'command.ExecuteNonQuery()';行 – JJDA

+0

在你的參數中使用正確的數據類型。我認爲你的Nombre字段是一個數字,你試圖在其中提供nvarchar。勒米知道是否是這種情況。 – MSI