2014-12-07 85 views
0

我想從使用twitter流api的C#控制檯應用程序中將一些數據保存到SQL Server中。我試圖以正常儲存保存數據,但沒有奏效。任何人都可以請建議我應該使用哪種方式來存儲流數據?在SQL Server 2012中保存流數據

這是我的C#代碼。謝謝你在前進

static void Main(string[] args) 
    { 
     TwitterCredentials.SetCredentials("xxxx,xxxx,xxxx,xxxx"); 
     Stream_FilteredStreamExample(); 
    } 

    private static void Stream_FilteredStreamExample() 
    { 
     SqlConnection conn = new SqlConnection(@"Data Source=xxxx;Initial Catalog=Surveillance;Integrated Security=True"); 
     conn.Open(); 

     var stream = Stream.CreateFilteredStream(); 
     stream.AddTrack("ebola"); 

     stream.MatchingTweetAndLocationReceived += (sender, args) => 
     { 
      if (!args.Tweet.IsRetweet) 
      { 
       var tweet = args.Tweet; 
       if(args.Tweet.Coordinates!=null) 
       { 
        SqlCommand myCommand = new SqlCommand("INSERT INTO TwitterDatabase(Tweet,Latitude,Longitude) values('"+tweet.Text+"','"+tweet.Coordinates.Latitude+"','"+tweet.Coordinates.Longitude+"')",conn); 
        Console.WriteLine("tweets:{0}", tweet.Text); 
        Console.WriteLine("(Coardinates{0}, {1})", tweet.Coordinates.Latitude, tweet.Coordinates.Longitude); 
       } 
      } 
     }; 

     stream.StartStreamMatchingAnyCondition(); 
     conn.Close(); 
    } 

在數據庫中,我有數據類型

Tweet = varchar(150) 

Latitude = float 

Longitude = float 
+0

[SQL注入警報(http://msdn.microsoft.com/en-us/library/ms161953%28v=sql.105%29.aspx) - 你應該** **不串連在一起您的SQL語句 - 使用**參數化查詢**來代替以避免SQL注入 – 2014-12-07 10:43:47

回答

1

你的連接被關閉,當您試圖保存鳴叫。打開連接,然後在你的事件中保存推文並執行命令:

private static void Stream_FilteredStreamExample() 
{ 
    var stream = Stream.CreateFilteredStream(); 
    stream.AddTrack("ebola"); 
    stream.MatchingTweetAndLocationReceived += (sender, args) => 
    { 
     if (!args.Tweet.IsRetweet) 
     { 
      using (SqlConnection conn = new SqlConnection(@"Data Source=xxxx;Initial Catalog=Surveillance;Integrated Security=True")) 
      { 
      conn.Open(); 
      var tweet = args.Tweet; 
      if(args.Tweet.Coordinates!=null) 
      { 
       using (SqlCommand myCommand = new SqlCommand("INSERT INTO TwitterDatabase(Tweet,Latitude,Longitude) values '"+tweet.Text+"','"+tweet.Coordinates.Latitude+"','"+tweet.Coordinates.Longitude+"')",conn)) 
       { 
        myCommand.ExecuteNonQuery(); 
       } 
      } 
      } 
     } 
    }; 
    stream.StartStreamMatchingAnyCondition(); 
} 

你真的不得不看看參數化查詢。你現在接觸到sql注入。

+0

謝謝@peer – Avinash 2014-12-07 11:07:04

1

我試圖存儲的數據是一個結構化數據,以便將以下代碼存儲到數據庫中。

stream.MatchingTweetAndLocationReceived += (sender, args) => 
     { 
      if (!args.Tweet.IsRetweet) 
      { 
       using (SqlConnection conn = new SqlConnection(@"Data Source=WIN-PAL1Q8DR163\AVINASH;Initial Catalog=Surveillance;Integrated Security=True")) 
       { 
       conn.Open(); 
       var tweet = args.Tweet; 
       if (args.Tweet.Coordinates != null) 
       { 
        try 
        { 
         using (SqlCommand myCommand = new SqlCommand("INSERT INTO TwitterDatabase(Tweet,Latitude,Longitude) VALUES(@Tweeets, @LatCoordinate, @LongCoordinate)", conn)) 
         { 
          myCommand.Parameters.Add(new SqlParameter("Tweeets", tweet.Text)); 
          myCommand.Parameters.Add(new SqlParameter("LatCoordinate", tweet.Coordinates.Latitude)); 
          myCommand.Parameters.Add(new SqlParameter("LongCoordinate", tweet.Coordinates.Longitude)); 
          myCommand.ExecuteNonQuery(); 
         } 
        }catch{ 
         Console.WriteLine("Could not insert."); 
        } 
       } 

      } 
    } 

     }; 
    stream.StartStreamMatchingAnyCondition(); 

} 

} 
}