简体   繁体   中英

How do I declare an *.SQL variable in C#

I want to change a variable which is in my SQL Script c:\\script.sql under @db by the user browsing to a different path.

SQL script:

DECLARE @Table TABLE 
(
    BackupName             NVARCHAR (128)  ,
    BackupDescription      NVARCHAR (255)  ,
    BackupType             SMALLINT        ,
    ExpirationDate         DATETIME        ,
    Compressed             BIT             ,
    Position               SMALLINT        ,
    DeviceType             TINYINT         ,
    UserName               NVARCHAR (128)  ,
    ServerName             NVARCHAR (128)  ,
    DatabaseName           NVARCHAR (128)  ,
    DatabaseVersion        INT             ,
    DatabaseCreationDate   DATETIME        ,
    BackupSize             NUMERIC (20, 0) ,
    FirstLSN               NUMERIC (25, 0) ,
    LastLSN                NUMERIC (25, 0) ,
    CheckpointLSN          NUMERIC (25, 0) ,
    DatabaseBackupLSN      NUMERIC (25, 0) ,
    BackupStartDate        DATETIME        ,
    BackupFinishDate       DATETIME        ,
    SortOrder              SMALLINT        ,
    CodePage               SMALLINT        ,
    UnicodeLocaleId        INT             ,
    UnicodeComparisonStyle INT             ,
    CompatibilityLevel     TINYINT         ,
    SoftwareVendorId       INT             ,
    SoftwareVersionMajor   INT             ,
    SoftwareVersionMinor   INT             ,
    SoftwareVersionBuild   INT             ,
    MachineName            NVARCHAR (128)  ,
    Flags                  INT             ,
    BindingID              UNIQUEIDENTIFIER,
    RecoveryForkID         UNIQUEIDENTIFIER,
    Collation              NVARCHAR (128)  ,
    FamilyGUID             UNIQUEIDENTIFIER,
    HasBulkLoggedData      BIT             ,
    IsSnapshot             BIT             ,
    IsReadOnly             BIT             ,
    IsSingleUser           BIT             ,
    HasBackupChecksums     BIT             ,
    IsDamaged              BIT             ,
    BeginsLogChain         BIT             ,
    HasIncompleteMetaData  BIT             ,
    IsForceOffline         BIT             ,
    IsCopyOnly             BIT             ,
    FirstRecoveryForkID    UNIQUEIDENTIFIER,
    ForkPointLSN           NUMERIC (25, 0)  NULL,
    RecoveryModel          NVARCHAR (60)   ,
    DifferentialBaseLSN    NUMERIC (25, 0)  NULL,
    DifferentialBaseGUID   UNIQUEIDENTIFIER,
    BackupTypeDescription  NVARCHAR (60)   ,
    BackupSetGUID          UNIQUEIDENTIFIER NULL,
    CompressedBackupSize   NUMERIC (20, 0) 
);

INSERT INTO @table
EXECUTE ('RESTORE HEADERONLY FROM DISK = '@db'');

SELECT ServerName,
       DatabaseName,
       SoftwareVersionMajor,
       SoftwareVersionMinor
FROM   @table;

I want the @DB to = my variable in C#

C# code:

public void PullData()
            {
                string connString = @"server=.\sqlserver2012; database = master; user =sam; pwd =sam; Connection Timeout = 15; MultipleActiveResultSets = true";
                string script = File.ReadAllText(@"C:\Temp Table.sql");
                string db = tb_bak_location.Text;

                SqlConnection conn = new SqlConnection(connString);
                SqlCommand cmd = new SqlCommand(script, conn);
                try
                {
                    conn.Open();

                    SqlDataAdapter da = new SqlDataAdapter(cmd);

                    da.Fill(datatable);
                    dataGridView1.DataSource = datatable;
                    da.Dispose();
                }

                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }

                finally
                {
                    conn.Close();
                }
            }

I just want to be able to read the SQL script from that location then implement my db variable when I run function.

Hope this makes sense

Thanks

    string db = tb_bak_location.Text;
    string script = File.ReadAllText(@"C:\Temp Table.sql").Replace("@db", db);

To change the parameter by some external value that you would like, you can assign value to parameter in your code-behind. After

SqlCommand cmd = new SqlCommand(script, conn);

Use

cmd.Parameters.AddWithValue(ParamName, Value);

Also consider creating your SqlConnection and SqlCommand in the using block, for automatic handling closing and opening the connections.

Just google: Adding parameters to sql script

Example link: http://www.csharp-station.com/Tutorial/AdoDotNet/Lesson06

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM