2017-07-06 3 views
1
string query = string.Format(@"if not exists(select id from user_detail where id_str = '" + args.Tweet.CreatedBy.IdStr + "') begin insert into user_detail(id_str,screen_name,user_name,createdate,hashtag,imageurl,message,unique_id,tweet_id)values('" + args.Tweet.CreatedBy.IdStr + "',N'" + args.Tweet.CreatedBy.ScreenName.Replace("'", "`") + "', N'" + args.Tweet.CreatedBy.Name.Replace("'", "`") + "','" + args.Tweet.CreatedAt + "',N'" + Hashtag + "',N'" + Convert.ToString() + "',N'" + args.Tweet.Text.Replace("'", "`") + "','" + Guid.NewGuid().ToString() + "','" + args.Tweet.IdStr + "') end else begin update user_detail set screen_name=N'" + args.Tweet.CreatedBy.ScreenName + "' where id_str = '" + args.Tweet.CreatedBy.IdStr + "' end"); 
+0

zuweisen die endgültige sql string zu lokalen 'string sql = ...', dann debuggen und überprüfen Sie die Zeichenfolge –

+0

es ist wirklich eine gute Idee parameterize Abfragen in 'SqlCommand' mit der' .Parameters.AddWithValue ("@ ColumnName "," Value ");' Sonst könnten Sie anfällig für die SQL-Injektion sein – Vladimir

Antwort

3

Niemals verketten Sie die Eingabe zum Erstellen von SQL. Es wird dich verletzen und dich verletzen und verletzen. Wenn Sie Parameter verwenden, werden alle Probleme der Escape-Funktion verschwinden, ebenso wie Probleme im Zusammenhang mit culture-info und das Risiko einer SQL-Injektion. Es bedeutet auch, dass Sie die Daten der Leute nicht korrumpieren müssen, indem Sie ' in Back-Ticks umwandeln (obwohl es tatsächlich einen Weg gibt, einfache Anführungszeichen zu umgehen).

parametrieren

Zum Beispiel:

const string query = @" 
if not exists(select id from user_detail where id_str = @idstr) 
begin 
    insert into user_detail(id_str,screen_name,user_name,createdate,hashtag,imageurl,message,unique_id,tweet_id) 
    values(@idstr, @screenName, /*...*/) 
end 
else 
begin 
    update user_detail set screen_name= @screenName 
    -- ... 
end"; 

Es gibt viele Möglichkeiten, die tatsächliche Ausführung zu tun. Zum Beispiel mit rohen ADO.NET:

using(var cmd = conn.CreateCommand()) { 
    cmd.CommandText = query; 
    cmd.Parameters.AddWithValue("idstr", idstr); 
    cmd.Parameters.AddWithValue("screenName", screenName); 
    // ... 
    cmd.ExecuteNonQuery(); 
} 

oder mit "adrett":

conn.Execute(query, new { idstr, screenName, /* ... */ }); 

In allen Fällen ... bezeichnet, wo ich zusätzliche Dinge ausgelassen habe für Sie zu füllen (das however- viele Spalten/Parameter/etc, die Ihre Daten beschreiben).

+0

für das, was wir tun wollen –

+0

@jeyajj einen Moment ... Bearbeitung ... –

Verwandte Themen