2016-12-21 5 views
1

Ich habe den folgenden Controller, der das Konto als der Eingabeparameter erhält, der mit dem Sql-Server verbindet und die gespeicherte Prozedur übergeben muss. Die gespeicherte Prozedur fügt einen neuen Datensatz ein wenn das Konto nicht vorhanden und Updates ist es, wenn bereits dortProblem beim Verbinden mit dem SQL-Server von Web API

 string strcon = ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString; 
     SqlConnection DbConnection = new SqlConnection(strcon); 
     DbConnection.Open(); 
     SqlCommand command = new SqlCommand("[dbo].[usp_InserUpadte]", DbConnection); 
     command.CommandType = CommandType.StoredProcedure; 

     //create type table 
     DataTable table = new DataTable(); 
     table.Columns.Add("AccountID", typeof(string)); 
     table.Rows.Add(Account); 

     SqlParameter parameter = command.Parameters.AddWithValue("@Account_TT", table); 
     parameter.SqlDbType = SqlDbType.Structured; 
     parameter.TypeName = "Account_TT"; 

Unterhalb der Connectionstring in web.config ist

<connectionStrings> 
<add name="DBConnection" 
providerName="System.Data.SqlClient" 
connectionString="Data Source=ServerName;Initial Catalog=DatabaseName;Integrated Security=True;MultipleActiveResultSets=True" /> 
</connectionStrings> 

die gespeicherte Prozedur ist wie

ALTER PROCEDURE [dbo].[usp_InserUpadte] 
@account_TT AS account_TT READONLY 

AS 
BEGIN 
SET NOCOUNT ON; 

BEGIN TRANSACTION; 

MERGE dbo.[Account] prj 
USING @account_TT tt 
ON prj.AccountID = tt.AccountID 
WHEN MATCHED THEN UPDATE SET prj.CounterSeq = prj.CounterSeq+1 
WHEN NOT MATCHED THEN INSERT (AccountID,CounterSeq) 
VALUES (tt.AccountID, 1); 

COMMIT TRANSACTION; 

END; 

wo der Tabellentyp mit

CREATE TYPE account_TT AS TABLE 
(
AccountID  nvarchar(50), 
) 
GO 

erstellt wird, wenn ich versuche, die API es jede Ausnahme werfen aber doesnot nennen weder erstellt/aktualisiert werden alle Datensätze mit der gespeicherten Prozedur. Ich habe versucht, die hinzugefügten Breakpoints zu debuggen. Ich sehe das in

DbConnection.Open(); 

enter image description here Sieht aus wie die Verbindung nicht geöffnet ist. Ich bin in der Lage, eine Verbindung mit dem SQL-Server von demselben Server aus herzustellen, an dem ich gerade arbeite, jedoch über SQL Management Studio. Kann mir bitte jemand vorschlagen, was das Problem sein könnte.

+0

SQL Server 12.0.4436.0 – trx

+1

Konnte Sie den Code einschließen, in dem Sie wirklich Ihren 'Befehl' ausführen? –

+0

Fragen Sie nach dem API-Aufruf? – trx

Antwort

1

Sie nicht korrekt Datenbank angeschlossen haben. versuchen Sie dieses:

2

Sie haben wahrscheinlich offen connection.Correct Weg Öffnungs Verbindung

string strcon = ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString; 

using(SqlConnection dbConnection = new SqlConnection(strcon)) 
    { 
     if (dbConnection.State==ConnectionState.Closed) 
     {      
      con.Open(); 
     } 
    } 
Verwandte Themen