读取.sql参数脚本

本文关键字:脚本 参数 sql 读取 | 更新日期: 2023-09-27 18:35:42

我有一个包含以下代码的.sql脚本

-- Drop stored procedure if it already exists
USE Temp
IF EXISTS (
  SELECT * 
    FROM INFORMATION_SCHEMA.ROUTINES 
   WHERE SPECIFIC_SCHEMA = N'Custom'
     AND SPECIFIC_NAME = N'RestoreVersion' 
)
   DROP PROCEDURE Custom.RestoreVersion
GO
CREATE PROCEDURE Custom.RestoreVersion
    @ID INT
AS
    SELECT * FROM [App].[Version] WHERE ID = @ID
    DROP PROCEDURE Custom.RestoreVersion
GO
EXECUTE Custom.RestoreVersion @ID = [ID from c# program]
GO

我想获取此文件并在 c# 中设置 @ID 参数,然后运行 sql 脚本。

我希望此脚本位于应用程序上的文件夹中,但无法使其正常工作。

我试过这个。

Console.Write(Server_Name + Environment.NewLine);
connectSqlServer(Server_Name);
SqlDataReader rdr = null;
Console.WriteLine("'nGet Version'n");
try
{
    SqlCommand cmd = new SqlCommand("Custom.RestoreVersion", conn);
    cmd.CommandType = System.Data.CommandType.StoredProcedure;
    cmd.Parameters.Add(new SqlParameter("@ID", ID));
    rdr = cmd.ExecuteReader();
    while (rdr.Read())
    {
        Console.WriteLine(Values);
    }
}
finally
{
    if (conn != null)
    {
        conn.Close();
    }
    if (rdr != null)
    {
        rdr.Close();
    }
}   

但是,我无法从资源文件夹中读取文件并将参数输入数据库。

读取.sql参数脚本

创建一个删除

自身的过程只是为了参数化某些东西没有任何目的;你可以直接这样做:

using(SqlCommand cmd = new SqlCommand(
    "SELECT * FROM [App].[Version] WHERE ID = @ID", conn))
{
    cmd.Parameters.Add(new SqlParameter("@ID", ID));
    using(var rdr = cmd.ExecuteReader()
    {
        while (rdr.Read())
        {
            var id = rdr.GetInt32(0);
            var name = rdr.GetString(1);
            // etc
        }
    }
}

或者使用像 dapper 这样的工具:

foreach(var row in conn.Query("SELECT * FROM [App].[Version] WHERE ID = @ID",
       new { ID })
{
    int id = row.Id;
    string name = row.Name
    // etc
}

从注释来看,听起来问题是更大的查询;有几种方法可以做到这一点;最简单的就是用C#编写代码,例如:

var sql = @"
-- this is a long query
declare @foo table(id int not null)
insert @foo (id)
select RangeId
from SomeTable
where Category = @category
select ... /* blah blah
lots more blah */";
cmd.CommandText = sql;
cmd.Parameters.AddWithValue("category", whatever);
// ...

或者,如果您确实希望查询是分开的:

cmd.CommandText = ReadQueryFromResources("myquery");