读取在线 CSV 文件并将其管理到 Microsoft SQL 数据库






4.38/5 (12投票s)
如何读取在线 Excel 文件并将其管理到 Microsoft SQL 数据库。
引言
对于长时间工作的软件开发者来说,可能需要从桌面或 Web 应用程序读取在线文件,然后将数据存储在本地系统或数据库中。 如果您没有这方面的经验,这会有些复杂。 您可以通过多种方式实现它。 在本次演示中,我将根据我的经验来解释如何处理这种情况。
背景
我有一个在线 Excel 文件,URL 是 http://velocitypath.com/odesk/buildings.csv。 我需要读取此文件并将其管理到 Microsoft SQL Server 数据库中。 Excel 文件的结构如下所示
开始吧
要将数据从 Excel 文件存储到数据库,需要在 Microsoft SQL Server 数据库中创建表结构。
- 打开 Microsoft SQL Server Management Studio
- 创建如下表结构
打开 Microsoft Visual Studio 2010
- 创建一个新项目(文件>新建>项目>Visual C#>Windows 窗体应用程序)
- 将其命名为 ReadingOnlineExcelFile
默认情况下,新项目包含一个名为 ReadExcel.cs 的窗体。 像下面这样设计窗体
要读取在线文件,需要发送 Web 请求。 成功处理 Web 请求后,Web 服务器将返回 Web 响应。 为了完成此操作,您需要使用 HttpWebRequest
、HttpWebResponse
类。 并且使用 WebRequest
类来创建 Web 请求。 这些类都可以在 System.Net
命名空间中找到。
using System.Net;
现在,创建一个方法来处理 Web 请求并获取计数器响应。 我们的目标是将 StreamReader
对象作为此方法的返回值。 因此,您需要包含
using System.IO;
#region Method
private StreamReader GetStream()
{
String strURL = String.Empty;
strURL = "http://velocitypath.com/odesk/buildings.csv";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strURL);
StreamReader reader;
using (HttpWebResponse response =(HttpWebResponse)request.GetResponse())
{
reader = new StreamReader(response.GetResponseStream());
}
return reader;
}
#endregion Method
在上面的方法中,WebRequest.Create()
用于创建 Web 请求,要获取 Web 请求的响应 GetResponse()
,要读取 Web 响应中的 stream
,使用 GetResponseStream()
。
添加 System.Configuration
引用
添加以下命名空间用于数据和 SQL 操作。
using System.Data;
using System.Configuration;
using System.Data.SqlClient;
在按钮单击事件中添加以下代码
private void btnReadExcel_Click(object sender, EventArgs e)
{
using (SqlConnection conn = new SqlConnection
(ConfigurationManager.ConnectionStrings["SQLConnection"].ToString()))
{
conn.Open();
StreamReader streamReader;
streamReader = GetStream();
streamReader.ReadLine();
while (!streamReader.EndOfStream)
{
String []row = streamReader.ReadLine().ToString().Split(',');
SqlCommand selectCommand;
selectCommand = new SqlCommand("SELECT * FROM Location
WHERE Latitude=@Latitude AND Longitude=@Longitude", conn);
selectCommand.Parameters.Add("@Latitude",
SqlDbType.Decimal, 20).Value = Convert.ToDecimal(row[0]);
selectCommand.Parameters.Add("@Longitude",
SqlDbType.Decimal, 20).Value = Convert.ToDecimal(row[1]);
SqlDataReader reader = selectCommand.ExecuteReader();
if (!reader.HasRows)
{
reader.Close();
SqlCommand insertCommand;
insertCommand = new SqlCommand("INSERT INTO Location
(Latitude,Longitude,BuildingName)
VALUES(@Latitude,@Longitude,@BuildingName)", conn);
insertCommand.Parameters.Add("@Latitude",
SqlDbType.Decimal, 20).Value = Convert.ToDecimal(row[0]);
insertCommand.Parameters.Add("@Longitude",
SqlDbType.Decimal, 20).Value = Convert.ToDecimal(row[1]);
insertCommand.Parameters.Add("@BuildingName",
SqlDbType.VarChar, 100).Value = row[2].ToString();
int intResult;
intResult = insertCommand.ExecuteNonQuery();
}
}
}
}
在上面的代码中,以下 GetStream()
从 Web 请求返回 Stream
。
streamReader = GetStream();
streamReader.ReadLine();
上面的代码行从 stream
中读取一行。
将 stream
中的行添加到数组中以便于操作。
String []row = streamReader.ReadLine().ToString().Split(',');
现在检查数据是否已存在于数据库中。
SqlCommand selectCommand;
selectCommand = new SqlCommand
("SELECT * FROM Location WHERE Latitude=@Latitude AND Longitude=@Longitude", conn);
selectCommand.Parameters.Add("@Latitude",
SqlDbType.Decimal, 20).Value = Convert.ToDecimal(row[0]);
selectCommand.Parameters.Add("@Longitude",
SqlDbType.Decimal, 20).Value = Convert.ToDecimal(row[1]);
SqlDataReader reader = selectCommand.ExecuteReader();
if (!reader.HasRows)
{
}
如果不存在,则将数据插入数据库。
reader.Close();
SqlCommand insertCommand;
insertCommand = new SqlCommand("INSERT INTO Location
(Latitude,Longitude,BuildingName) VALUES
(@Latitude,@Longitude,@BuildingName)", conn);
insertCommand.Parameters.Add("@Latitude",
SqlDbType.Decimal, 20).Value = Convert.ToDecimal(row[0]);
insertCommand.Parameters.Add("@Longitude",
SqlDbType.Decimal, 20).Value = Convert.ToDecimal(row[1]);
insertCommand.Parameters.Add("@BuildingName",
SqlDbType.VarChar, 100).Value = row[2].ToString();
int intResult;
intResult = insertCommand.ExecuteNonQuery();
这是数据库中的结果
结论
通过阅读本文,您可以创建自己的在线文件读取应用程序。 我认为这可能会在软件开发和专业工作中帮助您。
历史
- 2011 年 3 月 28 日:初始发布