1

int と区切り文字列の 2 つの変数を SQL Server プロシージャに送信するメソッドがあります。

変数値 (デバッガーからコピー):

detailId: 5
fileNames: "recruiter.txt|cert.pdf"

メソッド:

public void InsertFiles(int detailId, string fileNames)
{
    ConnectionStringSettings connString = ConfigurationManager.ConnectionStrings["PRADB"];
    using (SqlConnection conn = new SqlConnection(connString.ToString()))
    {
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = conn;
        cmd.CommandText = "dbo.InsertFiles";
        cmd.Parameters.AddWithValue("@detailId", detailId);
        cmd.Parameters.AddWithValue("@fileNames", fileNames);
        try
        {
            conn.Open();
            cmd.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            string exc = ex.ToString();
        }
        finally
        {
            conn.Close();
        }
    }
}

手順は次のとおりです。

ALTER PROCEDURE [dbo].[InsertFiles]
@detailId int,
@fileNames varchar(max)

AS
BEGIN

SET NOCOUNT ON;

insert into [dbo].[PRA_Files] (detailId, fileNames)
     values (@detailId, @fileNames)
END

デバッグ時に受け取った例外:

{"Incorrect syntax near 'dbo'."}

それでも、procから実行すると:

exec [dbo].[InsertFiles] 5, "recruiter.txt|cert.pdf"

それは正常に動作します。上記のメソッドの catch ブロックでキャッチされているため、エラーはコード側ではありません。私は困惑しています。

4

1 に答える 1

5

コマンドがストアド プロシージャであることを指定する必要があります。

SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "dbo.InsertFiles";
cmd.Parameters.AddWithValue("@detailId", detailId);
cmd.Parameters.AddWithValue("@fileNames", fileNames);
cmd.CommandType = CommandType.StoredProcedure;
于 2013-10-03T18:03:05.983 に答える