PHP开发者求助:用C#读取.sdf文件并POST JSON至Laravel应用
Got it! 针对你的需求,我整理了一个完整的C#小程序实现方案,直接就能用,帮你快速搞定.sdf数据提取和上报的问题:
完整C#实现方案
1. 项目准备
- 新建一个控制台应用(.NET Framework/.NET 6+),控制台程序轻量易部署,完全符合快速开发的需求
- 安装必要的NuGet包:
System.Data.SqlServerCe:专门用于连接和操作SQL Server Compact(.sdf)文件Newtonsoft.Json:便捷实现数据到JSON的序列化(也可以用.NET自带的System.Text.Json,Newtonsoft对复杂数据结构兼容性更好)System.Net.Http:用于发送HTTP POST请求到Laravel后端
2. 核心代码实现
直接复制以下代码,替换配置参数即可运行:
using System; using System.Collections.Generic; using System.Data.SqlServerCe; using System.Net.Http; using System.Text; using Newtonsoft.Json; namespace SdfDataExporter { class Program { static async System.Threading.Tasks.Task Main(string[] args) { // -------------------------- 替换成你的实际配置 -------------------------- string sdfFilePath = @"C:\YourProject\YourDatabase.sdf"; // 你的.sdf文件路径 string sqlQuery = "SELECT Id, Username, CreateTime FROM UserTable"; // 你的查询语句 string laravelApiUrl = "https://your-laravel-app.com/api/import-sdf-data"; // Laravel接收API地址 string laravelApiToken = "your-api-token-here"; // Laravel鉴权Token(如果需要) // ----------------------------------------------------------------------- try { // 1. 连接.sdf文件并查询数据 var extractedData = new List<Dictionary<string, object>>(); using (var conn = new SqlCeConnection($"Data Source={sdfFilePath};")) { conn.Open(); using (var cmd = new SqlCeCommand(sqlQuery, conn)) { using (var reader = cmd.ExecuteReader()) { while (reader.Read()) { var rowData = new Dictionary<string, object>(); // 自动读取所有列,不用手动指定字段名 for (int i = 0; i < reader.FieldCount; i++) { rowData[reader.GetName(i)] = reader.IsDBNull(i) ? null : reader.GetValue(i); } extractedData.Add(rowData); } } } } Console.WriteLine($"✅ 成功提取 {extractedData.Count} 条数据"); // 2. 将数据序列化为JSON string jsonContent = JsonConvert.SerializeObject(extractedData, Formatting.Indented); Console.WriteLine("\n生成的JSON数据:"); Console.WriteLine(jsonContent); // 3. 发送POST请求到Laravel using (var httpClient = new HttpClient()) { // 如果Laravel需要Token鉴权,添加请求头 if (!string.IsNullOrEmpty(laravelApiToken)) { httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {laravelApiToken}"); } var requestContent = new StringContent(jsonContent, Encoding.UTF8, "application/json"); var response = await httpClient.PostAsync(laravelApiUrl, requestContent); if (response.IsSuccessStatusCode) { var responseMsg = await response.Content.ReadAsStringAsync(); Console.WriteLine("\n🎉 数据发送成功!服务器响应:"); Console.WriteLine(responseMsg); } else { var errorMsg = await response.Content.ReadAsStringAsync(); Console.WriteLine($"\n❌ 数据发送失败,状态码:{response.StatusCode}"); Console.WriteLine("服务器错误信息:"); Console.WriteLine(errorMsg); } } } catch (Exception ex) { Console.WriteLine($"\n⚠️ 程序执行出错:{ex.Message}"); Console.WriteLine("详细错误堆栈:"); Console.WriteLine(ex.ToString()); } Console.WriteLine("\n按任意键退出..."); Console.ReadKey(); } } }
3. 关键细节说明
- .sdf连接字符串:如果你的.sdf文件设置了密码,需要在连接字符串后追加
;Password=YourDatabasePassword - 数据读取逻辑:自动读取查询结果的所有列,不用手动映射字段,适配不同的查询需求
- Laravel鉴权:如果你的Laravel API不需要Token,直接删除
Authorization请求头的代码即可 - 错误处理:包含完整的异常捕获,方便排查连接、查询或请求过程中出现的问题
4. Laravel后端接收示例
在Laravel的routes/api.php中添加接收接口:
use Illuminate\Http\Request; Route::post('/import-sdf-data', function (Request $request) { // 接收JSON格式的数据 $sdfData = $request->json()->all(); // 这里可以添加数据校验、入库等逻辑 // 示例:批量插入到User表 // DB::table('users')->insert($sdfData); return response()->json([ 'status' => 'success', 'received_count' => count($sdfData), 'message' => 'SDF数据接收并处理完成' ]); })->middleware('auth:api'); // 不需要鉴权的话可以去掉这个中间件
内容的提问来源于stack exchange,提问作者viparvez
相关产品推荐
相关产品推荐

