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

如何用C++通过ADO.NET连接SQL数据库并实现数据读写

C++/CLI 下使用 ADO.NET 操作 SQL Server 数据库示例

由于ADO.NET是.NET框架的组件,C开发中需要使用**C/CLI(托管C++)**来调用ADO.NET API。以下是完整的读写示例代码,覆盖你需要的int、string、string、string、string、double、int、int数据类型操作:

前置准备

  1. 在Visual Studio中创建CLR控制台应用程序(确保项目支持托管代码)
  2. 确保项目引用了System.Data程序集

完整代码示例

#using <System.dll>
#using <System.Data.dll>
#using <System.Xml.dll>

using namespace System;
using namespace System::Data;
using namespace System::Data::SqlClient;

int main()
{
    // 替换为你的数据库连接信息
    String^ connectionString = "Data Source=localhost;Initial Catalog=YourDatabase;User ID=sa;Password=YourPassword;";

    // --------------------------
    // 1. 插入数据
    // --------------------------
    try
    {
        SqlConnection^ conn = gcnew SqlConnection(connectionString);
        conn->Open();

        // 参数化SQL,避免注入问题并适配数据类型
        String^ insertSql = 
            "INSERT INTO YourTable(Id, StrCol1, StrCol2, StrCol3, StrCol4, DoubleCol, IntCol1, IntCol2) "
            "VALUES(@Id, @StrCol1, @StrCol2, @StrCol3, @StrCol4, @DoubleCol, @IntCol1, @IntCol2)";
        
        SqlCommand^ insertCmd = gcnew SqlCommand(insertSql, conn);

        // 绑定对应类型的参数
        insertCmd->Parameters->Add(gcnew SqlParameter("@Id", SqlDbType::Int))->Value = 1001;
        insertCmd->Parameters->Add(gcnew SqlParameter("@StrCol1", SqlDbType::NVarChar, 50))->Value = "SampleText1";
        insertCmd->Parameters->Add(gcnew SqlParameter("@StrCol2", SqlDbType::NVarChar, 50))->Value = "SampleText2";
        insertCmd->Parameters->Add(gcnew SqlParameter("@StrCol3", SqlDbType::NVarChar, 50))->Value = "SampleText3";
        insertCmd->Parameters->Add(gcnew SqlParameter("@StrCol4", SqlDbType::NVarChar, 50))->Value = "SampleText4";
        insertCmd->Parameters->Add(gcnew SqlParameter("@DoubleCol", SqlDbType::Float))->Value = 66.66;
        insertCmd->Parameters->Add(gcnew SqlParameter("@IntCol1", SqlDbType::Int))->Value = 2024;
        insertCmd->Parameters->Add(gcnew SqlParameter("@IntCol2", SqlDbType::Int))->Value = 12;

        int affectedRows = insertCmd->ExecuteNonQuery();
        Console::WriteLine("插入成功,影响行数: {0}", affectedRows);

        conn->Close();
    }
    catch (Exception^ ex)
    {
        Console::WriteLine("插入失败: {0}", ex->Message);
    }

    // --------------------------
    // 2. 按需读取数据(按ID查询)
    // --------------------------
    try
    {
        SqlConnection^ conn = gcnew SqlConnection(connectionString);
        conn->Open();

        String^ selectSql = 
            "SELECT Id, StrCol1, StrCol2, StrCol3, StrCol4, DoubleCol, IntCol1, IntCol2 "
            "FROM YourTable WHERE Id = @TargetId";
        
        SqlCommand^ selectCmd = gcnew SqlCommand(selectSql, conn);
        selectCmd->Parameters->Add(gcnew SqlParameter("@TargetId", SqlDbType::Int))->Value = 1001;

        SqlDataReader^ reader = selectCmd->ExecuteReader();
        while (reader->Read())
        {
            // 按字段索引读取对应类型数据,也可使用列名:reader->GetInt32(reader->GetOrdinal("Id"))
            int id = reader->GetInt32(0);
            String^ str1 = reader->GetString(1);
            String^ str2 = reader->GetString(2);
            String^ str3 = reader->GetString(3);
            String^ str4 = reader->GetString(4);
            double doubleVal = reader->GetDouble(5);
            int int1 = reader->GetInt32(6);
            int int2 = reader->GetInt32(7);

            Console::WriteLine("\n读取到数据:");
            Console::WriteLine("Id: {0}, Str1: {1}, Str2: {2}", id, str1, str2);
            Console::WriteLine("Str3: {0}, Str4: {1}, Double: {2}", str3, str4, doubleVal);
            Console::WriteLine("Int1: {0}, Int2: {1}", int1, int2);
        }

        reader->Close();
        conn->Close();
    }
    catch (Exception^ ex)
    {
        Console::WriteLine("读取失败: {0}", ex->Message);
    }

    Console::ReadLine();
    return 0;
}

关键注意事项

  • 替换代码中的connectionString、表名(YourTable)、列名为你的实际数据库信息
  • 参数化查询是必须的:既可以避免SQL注入,也能自动处理不同数据类型的转换
  • 读取数据时,确保字段的索引/列名与数据库表结构一致,类型不匹配会抛出异常
  • 操作完成后务必关闭SqlConnection和SqlDataReader,避免资源泄漏

内容的提问来源于stack exchange,提问作者Kito

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 21:53:15