You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:24:41