从Web API

时间:2016-12-21 09:31:29

标签: c# asp.net sql-server asp.net-web-api connection-string

我有以下控制器,它将帐户作为输入参数,连接到Sql服务器,并且必须调用存储过程传递帐户。如果帐户不存在,存储过程会插入新记录并更新它已经在那里

        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";

下面是web.config中的ConnectionString

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

存储过程类似于

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;

使用

创建表类型
CREATE TYPE account_TT AS TABLE
(
 AccountID     nvarchar(50),
 )
 GO

当我尝试调用API时,它不会抛出任何异常,但都不会使用存储过程创建/更新任何记录。我试图调试添加断点。我看到了

DbConnection.Open();

enter image description here 看起来连接没有打开。我可以通过SQL Management Studio从我正在处理的同一台服务器连接到SQL服务器。任何人都可以建议我可能是什么问题。

2 个答案:

答案 0 :(得分:2)

您可能已打开连接。打开连接的正确方法

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

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

答案 1 :(得分:1)

您没有正确连接到数据库。试试这个:

        using (var connection = new SqlConnection(ConnectionString))
        using (var command = new SqlCommand(commandText, connection) { CommandTimeout = 160, CommandType = commandType })
        using (var dataAdaptor = new SqlDataAdapter(command))
        {
            command.Parameters.AddRange(parameters);

            connection.Open();
            dataAdaptor.Fill(dS);
        }