2010-01-08 17 views
8

Quiero imprimir un valor devuelto por SQL Server.Cómo mostrar el valor impreso por consulta sql en el cuadro de mensaje

If NOT Exists(SELECT * FROM ItemList WHERE ItemName='txtItemNama') 
    BEGIN 
    INSERT INTO ItemList (ItemName) VALUES('txtItemNamea') 
    END 
ELSE 
    BEGIN 
    Print 'Duplicate' 
    END 

Esta consulta o me regreso ya sea el número de filas afectadas o Duplicar

Quiero utilizar este duplicado en C# en MessageBox.Show()

string query1 = "If NOT Exists(SELECT * FROM ItemList WHERE ItemName='txtItemName') BEGIN INSERT INTO ItemList (ItemName) VALUES('txtItemName') END ELSE BEGIN Print 'Duplicate' END"; 
      SqlCommand cmd = new SqlCommand(query1, conn); 
      SqlDataReader dr; 
      conn.Open(); 
      dr=cmd.ExecuteReader(); 
      conn.Close(); 
MessageBox.Show(dr); 

No sé cómo use dr para hacer esto. Por favor, ayúdenme a imprimir Duplicar aquí

MessageBox.Show (dr);

¿Qué debo hacer aquí?

+2

Sería mejor si se utiliza instrucción de selección en lugar de impresión para este – Brij

+0

@Brij u puede proporcionar un ejemplo. Aunque estoy más interesado en capturar este valor en frontend else, hay muchos métodos para hacer lo mismo, como cursor y procedimiento almacenado, tabla derivada y muchos más. –

Respuesta

1

con ADO.NET hay cuatro opciones para devolver información de una consulta SQL:

  • con un objeto DataSet para recopilar las filas devueltas y trabajar con estas filas además de los valores de retorno y el regreso parámetros.
  • Utilice un objeto DataReader para recopilar las filas devueltas, moverse a través de estas filas y recopilar valores devueltos y parámetros de retorno.
  • Utilice el método ExecuteScalar para devolver el valor de la primera columna de la primera fila de resultados con los valores de retorno y los parámetros de retorno. Esto es más útil con funciones agregadas.
  • Utilice el método ExecuteNonQuery para devolver solo los parámetros de devolución y los valores devueltos. Cualquier fila devuelta se descarta. Esto es más útil para ejecutar consultas de acción.

Estos son todos los métodos invocados desde su objeto de comando.

Hay muchas maneras diferentes de despellejar a un gato, puede usar parámetros de salida, puede usar ExecuteScalar, puede usar valores devueltos o puede usar conjuntos de registros ficticios.

Usted debe ser capaz de algo así como lo siguiente en su C# para obtener el valor de retorno de una consulta

El código anterior las capturas el valor de retorno que se puede establecer como sea necesario, tal vez con una 0 para existe y un 1 para no existe.

If NOT Exists(SELECT * FROM ItemList WHERE ItemName='txtItemNama')  
    BEGIN  
    INSERT INTO ItemList (ItemName) VALUES('txtItemNamea') 
    Return 0;  
    END  
ELSE  
    BEGIN  
    Return 1;  
    END 

Hay una advertencia poco con el consejo anterior, sin embargo - que suelen utilizar ya sea como un ORM LINQ to SQL o NHibernate o uso de procedimientos almacenados. Encuentro SQL en línea bastante engorroso. Por lo tanto, aunque mi respuesta debería ser sólida en general, probablemente deba trabajar con algunos detalles para que funcione exactamente como lo necesita.

+0

Incluso no uso código en línea, solo quería borrar mi concepto para capturar cómo recuperar el valor de 'impresión' en la interfaz; de lo contrario, utilizo el procedimiento almacenado –

7

unos años tarde, pero usted debe ser capaz de recuperar de impresión/información de texto (como publicada originalmente) adjuntando un manejador de sucesos a la InfoMessage event en el objeto SqlConnection -

Pero sólo hacer esto si se puede' t (por alguna razón) usa las alternativas mencionadas en este hilo.

static void Main(string[] args) 
{ 
    using (SqlConnection connection = new SqlConnection(@"someconnectionstring")) 
    { 
     connection.Open(); 
     using(SqlCommand command = new SqlCommand("test", connection)) 
     { 
      connection.InfoMessage += new SqlInfoMessageEventHandler(connection_InfoMessage); 
      using (SqlDataAdapter adapter = new SqlDataAdapter(command)) 
      { 
       DataTable dt = new DataTable(); 
       adapter.Fill(dt); // Do something with DataTable 
      } 
     } 
    } 
} 

static void connection_InfoMessage(object sender, SqlInfoMessageEventArgs e) 
{ 
    // e contains info message etc 
} 
+0

si lo he condicionado en la consulta como si la verdadera impresión insertara el resto falso, luego imprima 'no se puede imprimir' y este evento obtenga todos los mensajes else si es verdadero o falso – user2491383

Cuestiones relacionadas