Ich möchte eine Variable ändern, die in meinem SQL-Skript ist c:\script.sql
unter @db
durch den Benutzer zu einem anderen Pfad navigieren.Wie deklariere ich eine *. SQL-Variable in C#
SQL-Skript:
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;
ich die @ DB zu wollen = meine 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();
}
}
Ich möchte nur in der Lage sein, den SQL-Skript zu lesen von diesem Ort dann implementieren Sie meine db
Variable, wenn ich Funktion ausführen.
Hope this Sinn
Dank
Die Ersatzmethode ist, was ich vorschlagen würde. Ich schlage jedoch vor, einen SQLCMD-Variablennamen wie '$ (db)' zu verwenden, damit das gleiche Skript von SQLCMD oder SSMS mit dem gewünschten Wert ausgeführt werden kann. SQLCMD Variablen sind ausführlich in https://msdn.microsoft.com/en-us/library/ms188714.aspx –
Vielen Dank dafür! Ich habe nicht über einen Ersatz nachgedacht. Prost - jede Idee, warum ich gewählt worden bin ...? – SCramphorn
Wenn 'tb_bak_location' ein Textfeld ist, haben Sie gerade eine Sicherheitslücke für Sql Injection geöffnet. –