2017-11-24 2 views
-1

Ich arbeite an einem Programm auf C# VS 2015. In meinem Programm gibt es eine große Textanzeige, die Nachricht generiert, wenn ich auf eine bestimmte Schaltfläche klicken, um anzuzeigen, dass eine Aktion ausgeführt wird.Anzeigen der Zeilenanzahl von SQL Server zu Programm

Wie auch immer, ich habe ein SQL-Skript, wo es Abfragen für COUNT für einige Tabellen hat. Ich kann dieses Skript über mein Programm ausführen. Da die Zeilenanzahl jedoch die Gesamtzahl der Zeilen für eine Tabelle anzeigt, kann sie nur innerhalb von SQL Server angezeigt werden. Ich habe mich gefragt, ob es eine Möglichkeit gibt, mein Skript auszuführen und auch die ZEILEN ZÄHLEN in meinem Programm in der großen Textbox anzuzeigen?

Hier ist ein Ausschnitt aus meinem Code, SQL-Skript auszuführen:

/* open sql connection to execute SQL script: Row count script*/ 
    try 
    { 
     using (SqlConnection con = new SqlConnection(constr)) 
     { 
      con.Open(); 
      FileInfo file = new FileInfo(DIRECTORY OF THE SCRIPT); 
      string script = file.OpenText().ReadToEnd(); 
      Server server = new Server(new ServerConnection(con)); 
      server.ConnectionContext.ExecuteNonQuery(script); 
      Display("ABCDG"); -- to display message on text display 
      con.Close(); 



     } 

    } 
    catch (Exception ex) 
    { 

     textBox1.AppendText(string.Format("{0}", Environment.NewLine)); 
     textBox1.AppendText(string.Format("{0} MainPage_Load() exception - {1}{2}", _strThisAppName, ex.Message, Environment.NewLine)); 
     Display(ex.Message + ""); -- display message to textbox 
     textBox1.AppendText(string.Format("{0}", Environment.NewLine)); 
     Debug.WriteLine(string.Format("{0} MainPage_Load() exception - {1}", _strThisAppName, ex.Message)); 


    } 

Hier ist eine Momentaufnahme meines Programms:

https://i.stack.imgur.com/uKP99.png 
+1

und was ist das Skript in 'ExecuteNonQuery (Skript) auszuführen;' ?? – derloopkat

+0

Das Skript enthält nur eine Liste der Zeilenanzahl. Wählen Sie z. B. count (*) aus Tabelle A, wählen Sie count (*) aus Tabelle B usw. –

+0

A_Name_Does_Not_Matter Können Sie erläutern, wie Sie dies erreichen? –

Antwort

1

Wenn Sie mehrere Abfragen in Ihrer Skriptdatei haben, Dann sollten Sie Ihr Skript mit @rowsAffected Variable wie unten in T-SQL dargestellt verbessern. Dann müssen Sie in Ihrem C# -Code ExecuteScalar aufrufen, um die detaillierten Zeilen zu erhalten, die von Ihrem Skript betroffen sind.

**Script file with @rowsAffected variable logic** 

--add following variable at start of your script 
DECLARE @rowsAffected VARCHAR(2000); 

INSERT INTO [dbo].[Products] ([ProductName]) VALUES ('sun1'),('sun2'),('sun3'); 

--after each query that you want to track, include the following line 
SET @rowsAffected = 'Products : ' + CAST(@@rowcount AS varchar(20)); 

UPDATE [dbo].[newTable] SET [ColB] = 'b' ,[ColC] = 'd',[ColD] = 'e' ,[ColE] = 'f' WHERE ColA='a'; 

--after each query that you want to track, include the following line 
SET @rowsAffected = @rowsAffected + ', newTable : ' + CAST(@@rowcount AS varchar(20)); 

-- add the query below at end of your script 
SELECT @rowsAffected; 

Sie den Text aus Ihrer Script-Datei lesen müssen, wie Sie in Ihrem Code tun, und dann einen Befehl Objekt erstellen, unter Verwendung des lesenden Text aus einer Datei, bevor Sie den Code im Code-Schnipsel ausgeführt wird.

C# -Code obige Skript

string rowsAffected =(string) command.ExecuteScalar(); 
//you can now use rowsAffected variable in any way you like 
//it will contain something like Table1 : 4, Table2 : 6 

Detaillierte C# -Code mit Ihrem ursprünglichen Code

using (SqlConnection con = new SqlConnection(constr)) 
    { 

     FileInfo file = new FileInfo(DIRECTORY OF THE SCRIPT); 
     string script = file.OpenText().ReadToEnd(); 

     SqlCommand command = new SqlCommand(script, con); 
     command.CommandType = CommandType.Text; 
     try 
     { 
      con.Open(); 
      string rowsAffected =(string) command.ExecuteScalar(); 
      Display(rowsAffected); 
      con.Close(); 
     } 
     catch (Exception ex) 
     { 
      con.Close(); 
      Display(ex.Message); 
     } 
    } 
+0

Kommentare sind nicht für längere Diskussionen; Diese Konversation wurde [in den Chat verschoben] (http://chat.stackoverflow.com/rooms/160002/discussion-on-answer-by-sunil-displaying-row-count-from-sql-server-to-program) . – Andy

0

Als Tetsuya Yamamoto in seinem Kommentar sagte, was du bist Suchen nach ist die Verwendung der ExecuteScalar-Methode. Ihr Code ändern so etwas wie die unten

 int numOfRows = (int)server.ConnectionContext.ExecuteScalar(script); 
    string displayText = numOfRows.ToString(); 
    Display(displayText); -- to display message on text display 
    con.Close(); 

Der gegossene ToString ist nur für Sicherheitszwecke aussehen kann, wie ich bin nicht sicher, wie Sie Ihre Anzeige einen int-Wert behandelt

+0

Ja, aber OP schlägt vor, dass er mehrere Zählabfragen in diesem Skript ausführt, nicht nur eine Auswahl zählen. – derloopkat

+0

Ich weiß ganz genau, dass dies eine Möglichkeit ist, aber nicht in meiner Situation. Sie können den Schnappschuss meines Programms sehen. Auf der linken Seite befindet sich eine große Textbox. Mein Ziel ist es, eine Schaltfläche zu erstellen. Wenn Sie diese Schaltfläche drücken, wird das Skript ausgeführt. Der Skriptname lautet countrow.sql. Innerhalb des Skripts gibt es viele Abfragen zum Zählen von Datensätzen für verschiedene Tabellen, aber das ist nicht das Problem. Ich möchte nur, dass das Ergebnis in Echtzeit auf dem Textfeld angezeigt wird, so wie es auf dem Ergebnisbildschirm in SQL Server angezeigt wird, wenn Sie eine Zählungsabfrage ausführen. ExecuteScarlar Methode wird dies nicht tun. –

Verwandte Themen