ডাটাবেস টেবিল থেকে বর্গ তৈরি করুন


214

আমি কীভাবে কোনও এসকিউএল সার্ভারের টেবিল অবজেক্ট থেকে একটি ক্লাস তৈরি করতে পারি?

আমি কিছু ওআরএম ব্যবহার করার কথা বলছি না। আমার কেবল সত্ত্বা তৈরি করতে হবে (সাধারণ বর্গ)। কিছুটা এইরকম:

    public class Person 
    {
        public string Name { get;set; }
        public string Phone { get;set; }
    }

কিছু টেবিল দেওয়া হয়েছে:

+----+-------+----------------+
| ID | Name  |     Phone      |
+----+-------+----------------+
|  1 | Alice | (555) 555-5550 |
|  2 | Bob   | (555) 555-5551 |
|  3 | Cathy | (555) 555-5552 |
+----+-------+----------------+



14
কেন সত্তা ফ্রেমওয়ার্ক আপনার জন্য ক্লাস তৈরি করতে দিচ্ছে না, তবে কেবল ডাটাবেস অ্যাক্সেসের সাথে ক্লাসগুলি ব্যবহার করবেন না?
জন স্যান্ডার্স

আমি @ জন সান্ডার্সের সাথে আরও একমত হতে পারি না। আমি অতীতে নিজে নিজে এটি করেছি, তবে এটি খুব সময়সাপেক্ষ। EF বেশিরভাগ ক্ষেত্রে ঠিক প্রথমবার এটি করে। যদি তা না হয় তবে উত্পন্ন ক্লাসগুলিতে টুইট করা এটি নিজের মতো করে করার চেয়ে অনেক বেশি সময় সাপেক্ষ। একটি ORM জেনারেটর আমার পক্ষে করতে পারে এমন কোডের চেয়ে আমার সময়ের সাথে আমার আরও ভাল জিনিস করা উচিত। আমি উত্পন্ন কোডটির জন্য অপছন্দ বুঝতে পেরেছি, তবে ট্রেড-অফ সময় (এবং ব্যয়) সাশ্রয় করার পক্ষে এটি আমার পক্ষে কমপক্ষে মূল্যবান।
ডেভিড

4
আমি মনে করি ইএফ প্রকৃতপক্ষে সর্বোত্তম সমাধান হবে। স্কিল ক্লাস থেকে লিনকিউ আরেকটি সম্ভাবনা থাকবে। আপনি এটি কেবল আপনার প্রকল্পে যুক্ত করুন এবং এটি একটি ডেটাবেস সংযোগ দিন। এরপরে আপনি কেবল আপনার প্রয়োজনীয় সারণীগুলি নির্বাচন করুন এবং এটি আপনার জন্য কিছু ক্লাস তৈরি করবে।
কেভিন ক্লোয়েট

2
অনুশীলনে, EF সর্বদা প্রতিটি ক্ষেত্রেই সেরা সমাধান নয়। একটি উদাহরণ হিসাবে, বেশ কয়েকটি অনভিজ্ঞ ডেভেলপার থাকতে পারে যারা এডিএমএক্স ফাইলটিতে ক্রেস পরিবর্তন করে যার কারণে সংস্করণ বিবাদগুলি কমপক্ষে বলে দেয় ... এছাড়াও, বিকল্পটি সর্বদা উপলব্ধ নাও হতে পারে। উদাহরণস্বরূপ, প্রযুক্তিগত সীসা কেবল আপনি যে কোনও কারণেই এটি ব্যবহার করতে চান না।
কার্নি কোড

উত্তর:


683

আপনার টেবিলের নামে @ টেবিলনাম সেট করুন।

declare @TableName sysname = 'TableName'
declare @Result varchar(max) = 'public class ' + @TableName + '
{'

select @Result = @Result + '
    public ' + ColumnType + NullableSign + ' ' + ColumnName + ' { get; set; }
'
from
(
    select 
        replace(col.name, ' ', '_') ColumnName,
        column_id ColumnId,
        case typ.name 
            when 'bigint' then 'long'
            when 'binary' then 'byte[]'
            when 'bit' then 'bool'
            when 'char' then 'string'
            when 'date' then 'DateTime'
            when 'datetime' then 'DateTime'
            when 'datetime2' then 'DateTime'
            when 'datetimeoffset' then 'DateTimeOffset'
            when 'decimal' then 'decimal'
            when 'float' then 'double'
            when 'image' then 'byte[]'
            when 'int' then 'int'
            when 'money' then 'decimal'
            when 'nchar' then 'string'
            when 'ntext' then 'string'
            when 'numeric' then 'decimal'
            when 'nvarchar' then 'string'
            when 'real' then 'float'
            when 'smalldatetime' then 'DateTime'
            when 'smallint' then 'short'
            when 'smallmoney' then 'decimal'
            when 'text' then 'string'
            when 'time' then 'TimeSpan'
            when 'timestamp' then 'long'
            when 'tinyint' then 'byte'
            when 'uniqueidentifier' then 'Guid'
            when 'varbinary' then 'byte[]'
            when 'varchar' then 'string'
            else 'UNKNOWN_' + typ.name
        end ColumnType,
        case 
            when col.is_nullable = 1 and typ.name in ('bigint', 'bit', 'date', 'datetime', 'datetime2', 'datetimeoffset', 'decimal', 'float', 'int', 'money', 'numeric', 'real', 'smalldatetime', 'smallint', 'smallmoney', 'time', 'tinyint', 'uniqueidentifier') 
            then '?' 
            else '' 
        end NullableSign
    from sys.columns col
        join sys.types typ on
            col.system_type_id = typ.system_type_id AND col.user_type_id = typ.user_type_id
    where object_id = object_id(@TableName)
) t
order by ColumnId

set @Result = @Result  + '
}'

print @Result

5
জন্য Nullable প্রকারভেদ মধ্যে এই কোড যোগ endএবং ColumnTypeAlex এর SQL স্ক্রিপ্ট হবে। + CASE WHEN col.is_nullable=1 AND typ.name NOT IN ('binary', 'varbinary', 'image', 'text', 'ntext', 'varchar', 'nvarchar', 'char', 'nchar') THEN '?' ELSE '' END
স্তম্ভিত

6
@ অ্যালেক্সআজা আপনার "যখন" float' then 'float'" when 'float' then 'double'" when 'real' then 'double'"তে" পরিবর্তন হওয়া উচিত এবং আপনার "" "তে" পরিবর্তন করা উচিত " " when 'real' then 'float'মনে হয় আপনি এই ধরণের গুলিয়ে ফেলেছেন a ।
জ্যারেড বিচ

4
উত্তম উত্তর, তবে আপনাকে পরিবর্তন print @Resultকরতে হবে print CAST(@Result AS TEXT)অন্যথায় এটি বড় টেবিলগুলিতে কাটা পড়ে।
রবার্ট ম্যাককি

2
এটিতে বৈধতার জন্য ডেটা টীকা যুক্ত করার বিষয়ে - যেমন সর্বোচ্চ ক্ষেত্রের দৈর্ঘ্য? :)
নিকো


72

স্কেল সার্ভার ২০০৮ আর 2 এ কাজ করার জন্য আমি অ্যালেক্সের উত্তর পেতে পারি না। সুতরাং, আমি একই মৌলিক নীতিগুলি ব্যবহার করে এটি আবার লিখেছি। এটি এখন স্কিমাগুলির জন্য মঞ্জুরি দেয় এবং কলাম-সম্পত্তি ম্যাপিংয়ের জন্য (বেশিরভাগ সি # মান প্রকারে নালযোগ্য তারিখের প্রকারগুলি ম্যাপিং সহ) একাধিক সংশোধন করা হয়েছে। এখানে স্কেল:

   DECLARE @TableName VARCHAR(MAX) = 'NewsItem' -- Replace 'NewsItem' with your table name
    DECLARE @TableSchema VARCHAR(MAX) = 'Markets' -- Replace 'Markets' with your schema name
    DECLARE @result varchar(max) = ''

    SET @result = @result + 'using System;' + CHAR(13) + CHAR(13) 

    IF (@TableSchema IS NOT NULL) 
    BEGIN
        SET @result = @result + 'namespace ' + @TableSchema  + CHAR(13) + '{' + CHAR(13) 
    END

    SET @result = @result + 'public class ' + @TableName + CHAR(13) + '{' + CHAR(13) 

    SET @result = @result + '#region Instance Properties' + CHAR(13)  

   SELECT
      @result = @result + CHAR(13)
      + ' public ' + ColumnType + ' ' + ColumnName + ' { get; set; } ' + CHAR(13)
    FROM (SELECT
      c.COLUMN_NAME AS ColumnName,
      CASE c.DATA_TYPE
        WHEN 'bigint' THEN CASE C.IS_NULLABLE
            WHEN 'YES' THEN 'Int64?'
            ELSE 'Int64'
          END
        WHEN 'binary' THEN 'Byte[]'
        WHEN 'bit' THEN CASE C.IS_NULLABLE
            WHEN 'YES' THEN 'bool?'
            ELSE 'bool'
          END
        WHEN 'char' THEN 'string'
        WHEN 'date' THEN CASE C.IS_NULLABLE
            WHEN 'YES' THEN 'DateTime?'
            ELSE 'DateTime'
          END
        WHEN 'datetime' THEN CASE C.IS_NULLABLE
            WHEN 'YES' THEN 'DateTime?'
            ELSE 'DateTime'
          END
        WHEN 'datetime2' THEN CASE C.IS_NULLABLE
            WHEN 'YES' THEN 'DateTime?'
            ELSE 'DateTime'
          END
        WHEN 'datetimeoffset' THEN CASE C.IS_NULLABLE
            WHEN 'YES' THEN 'DateTimeOffset?'
            ELSE 'DateTimeOffset'
          END
        WHEN 'decimal' THEN CASE C.IS_NULLABLE
            WHEN 'YES' THEN 'decimal?'
            ELSE 'decimal'
          END
        WHEN 'float' THEN CASE C.IS_NULLABLE
            WHEN 'YES' THEN 'Single?'
            ELSE 'Single'
          END
        WHEN 'image' THEN 'Byte[]'
        WHEN 'int' THEN CASE C.IS_NULLABLE
            WHEN 'YES' THEN 'int?'
            ELSE 'int'
          END
        WHEN 'money' THEN CASE C.IS_NULLABLE
            WHEN 'YES' THEN 'decimal?'
            ELSE 'decimal'
          END
        WHEN 'nchar' THEN 'string'
        WHEN 'ntext' THEN 'string'
        WHEN 'numeric' THEN CASE C.IS_NULLABLE
            WHEN 'YES' THEN 'decimal?'
            ELSE 'decimal'
          END
        WHEN 'nvarchar' THEN 'string'
        WHEN 'real' THEN CASE C.IS_NULLABLE
            WHEN 'YES' THEN 'Double?'
            ELSE 'Double'
          END
        WHEN 'smalldatetime' THEN CASE C.IS_NULLABLE
            WHEN 'YES' THEN 'DateTime?'
            ELSE 'DateTime'
          END
        WHEN 'smallint' THEN CASE C.IS_NULLABLE
            WHEN 'YES' THEN 'Int16?'
            ELSE 'Int16'
          END
        WHEN 'smallmoney' THEN CASE C.IS_NULLABLE
            WHEN 'YES' THEN 'decimal?'
            ELSE 'decimal'
          END
        WHEN 'text' THEN 'string'
        WHEN 'time' THEN CASE C.IS_NULLABLE
            WHEN 'YES' THEN 'TimeSpan?'
            ELSE 'TimeSpan'
          END
        WHEN 'timestamp' THEN 'Byte[]'
        WHEN 'tinyint' THEN CASE C.IS_NULLABLE
            WHEN 'YES' THEN 'Byte?'
            ELSE 'Byte'
          END
        WHEN 'uniqueidentifier' THEN CASE C.IS_NULLABLE
            WHEN 'YES' THEN 'Guid?'
            ELSE 'Guid'
          END
        WHEN 'varbinary' THEN 'Byte[]'
        WHEN 'varchar' THEN 'string'
        ELSE 'Object'
      END AS ColumnType,
      c.ORDINAL_POSITION
    FROM INFORMATION_SCHEMA.COLUMNS c
    WHERE c.TABLE_NAME = @TableName
    AND ISNULL(@TableSchema, c.TABLE_SCHEMA) = c.TABLE_SCHEMA) t
    ORDER BY t.ORDINAL_POSITION

    SET @result = @result + CHAR(13) + '#endregion Instance Properties' + CHAR(13)  

    SET @result = @result  + '}' + CHAR(13)

    IF (@TableSchema IS NOT NULL) 
    BEGIN
        SET @result = @result + CHAR(13) + '}' 
    END

    PRINT @result

এটি নীচের মত সি # উত্পাদন করে:

using System;

namespace Markets
{
    public class NewsItem        {
        #region Instance Properties

        public Int32 NewsItemID { get; set; }

        public Int32? TextID { get; set; }

        public String Description { get; set; }

        #endregion Instance Properties
    }

}

এটি EF, লিনক থেকে এসকিএল, এমনকি স্ক্যাফোোল্ডিং ব্যবহার করার ধারণা হতে পারে; যাইহোক, এমন সময়গুলি আসে যখন এই জাতীয় কোডিংয়ের একটি অংশটি কাজে আসে। সত্যই, আমি ইএফ নেভিগেশন বৈশিষ্ট্যগুলি ব্যবহার করতে পছন্দ করি না যেখানে এটি উত্পন্ন কোডটি 1000 সারি গ্রিড তৈরি করতে 19,200 পৃথক ডাটাবেস কল করেছে। এটি একটি একক ডাটাবেস কল এ অর্জন করা যেতে পারে। তবুও, এটি কেবল এমন হতে পারে যে আপনার প্রযুক্তিগত স্থপতি আপনি EF এবং এর মতো ব্যবহার করতে চান না। সুতরাং, আপনাকে এই জাতীয় কোডে ফিরে যেতে হবে ... প্রসঙ্গক্রমে, প্রতিটি ডেটাঅ্যানোটেশন ইত্যাদির বৈশিষ্ট্যযুক্ত বৈশিষ্ট্যগুলি সজ্জিত করার ধারণাও থাকতে পারে, তবে আমি এই পোস্টটি কঠোরভাবে রাখছি।

সম্পাদনা জন্য ফিক্সড টাইমস্ট্যাম্প এবং GUID?


+1, এটি আমার পক্ষেও ভাল কাজ করেছে। আমি আমাদের প্রধান ডিবি এর জন্য ইএফ ব্যবহার করছি তবে অন্য ডিবি থেকে কোনও স্প্রোক দখল করতে হবে এবং এর জন্য একটি সম্পূর্ণ ইএফ প্রকল্পের কোড আপ করতে চাইনি, তাই এটি আমার স্প্রোক রেজাল্টকে সামঞ্জস্য করার জন্য দ্রুত একটি ক্লাস তৈরি করুক ... ধন্যবাদ
জিম টোলান

আমি এখনও এটি ব্যবহার করি তবে আমি স্ট্রিং দৈর্ঘ্যের ইত্যাদির জন্য এমভিসি সম্পত্তি বৈশিষ্ট্যগুলি অন্তর্ভুক্ত করেছি
কারনেকোড

কোন সম্পত্তি / কলাম নেই আমার জন্য খালি ক্লাস উত্পাদন করে।
হাইউইভিঞ্জাররা 21 '

@ হাইউইঞ্জার্স: আপনি কি কোনও বৈধ স্কিমা এবং টেবিলের নাম ব্যবহার করছেন? আপনার উপরের প্রয়োগটি আমাকে দেখান
কারনেকোড

এটি একটি পালিশ করা হয়। আমি এটি ব্যবহার করছি। তবে আসলটি তৈরি করার জন্য অ্যালেক্সকে ধন্যবাদ।
তেজস্বী হেগডে

20

ভিবি সংস্করণ

declare @TableName sysname = 'myTableName'
declare @prop varchar(max)
PRINT 'Public Class ' + @TableName
declare props cursor for
select distinct ' public property ' + ColumnName + ' AS ' + ColumnType AS prop
from ( 
    select  
        replace(col.name, ' ', '_') ColumnName,  column_id, 
        case typ.name  
            when 'bigint' then 'long' 
            when 'binary' then 'byte[]' 
            when 'bit' then 'boolean' 
            when 'char' then 'string' 
            when 'date' then 'DateTime' 
            when 'datetime' then 'DateTime' 
            when 'datetime2' then 'DateTime' 
            when 'datetimeoffset' then 'DateTimeOffset' 
            when 'decimal' then 'decimal' 
            when 'float' then 'float' 
            when 'image' then 'byte[]' 
            when 'int' then 'integer' 
            when 'money' then 'decimal' 
            when 'nchar' then 'char' 
            when 'ntext' then 'string' 
            when 'numeric' then 'decimal' 
            when 'nvarchar' then 'string' 
            when 'real' then 'double' 
            when 'smalldatetime' then 'DateTime' 
            when 'smallint' then 'short' 
            when 'smallmoney' then 'decimal' 
            when 'text' then 'string' 
            when 'time' then 'TimeSpan' 
            when 'timestamp' then 'DateTime' 
            when 'tinyint' then 'byte' 
            when 'uniqueidentifier' then 'Guid' 
            when 'varbinary' then 'byte[]' 
            when 'varchar' then 'string' 
        end ColumnType 
    from sys.columns col join sys.types typ on col.system_type_id = typ.system_type_id 
    where object_id = object_id(@TableName) 
) t 
order by prop
open props
FETCH NEXT FROM props INTO @prop
WHILE @@FETCH_STATUS = 0
BEGIN
    print @prop
    FETCH NEXT FROM props INTO @prop
END
close props
DEALLOCATE props
PRINT 'End Class'

কিন্তু গেট / এসইটি নেই?
হাইউইঞ্জাররা

1
@highwingers যেহেতু ভিসুয়াল স্টুডিও 2010, তারা প্রয়োজন হয় না stackoverflow.com/a/460032/618186
guanome

ডান কাজ করার জন্য আমাকে উপরে "মাইডাটাবেস ব্যবহার করুন" পাঠ্য যুক্ত করতে হয়েছিল। অন্যথায় এটি অবিশ্বাস্য শ্রেণীর বৈশিষ্ট্যগুলি তৈরি করে।
সিজার

খুব সুন্দর. কিন্তু floatযেতে হবে Double, byte[]করতেByte()
RichieRich

সুন্দরভাবে সম্পন্ন. এমনকি আমি একটি দর্শন চেষ্টা করেছিলাম এবং এটি একটি কবজির মতো কাজ করে!
হানলেট ইস্কো

14

কিছুটা দেরি হলেও এসকিউএল ফলাফল, এসকিউএল টেবিল এবং এসকিউএল এসপি থেকে সি # (বা অন্যান্য) অবজেক্ট তৈরি করতে সহায়তা করার জন্য আমি একটি ওয়েব সরঞ্জাম তৈরি করেছি।

sql2object.com

এটি আপনার সমস্ত সম্পত্তি এবং প্রকারগুলি টাইপ করতে সত্যই নিরাপদ করতে পারে।

প্রকারগুলি স্বীকৃত না হলে ডিফল্ট নির্বাচন করা হবে।


1
খারাপ না তবে এটি উত্স হিসাবে টেবিল সংজ্ঞা স্ক্রিপ্ট ব্যবহার করতে পারে না
আনাতল

এটি দুর্দান্ত) এটি দুর্দান্ত যে এটি ফলাফল এবং সারণী উভয়ের জন্যই কাজ করে। সত্যিই খুব ভাল লাগবে যদি আপনি কেবলমাত্র সমস্ত CREATE TABLEজিনিস উপেক্ষা করার জন্য এটি পরিবর্তন করতে পারেন যাতে আমি সমস্ত কিছু কেটে পেস্ট করতে পারি। এছাড়াও যদি আপনি চান্স পান তবে আপনি সেখানে একটি 'ট্রিম ()' যুক্ত করতে পারেন - যদি এটি শুরুতে কোনও ফাঁকা রেখা থাকে এবং ব্যর্থ হয় তবে লোকেরা এটি ছেড়ে দেবে। আপনি যদি এটিকে সরাতে জানেন তবে সরল - তবে আপনি কোনও ত্রুটি দিলে লোকজন হারাবেন।
সাইমন_উইভার

এছাড়াও একটি এসকিউএল ফলাফল সেট জন্য বিন্যাস কি। আমি কেবল একটি পাঠ্য আউটপুট উইন্ডো থেকে অনুলিপি করে আটকান এবং এটি আমাকে সমস্ত কলামের নাম সম্বলিত একটি একক ক্ষেত্র দেয়: - / কৌশলটি কী?
সাইমন_উইভার

অথবা আপনি এটিকে ওপেন সোর্স তৈরি করতে পারেন এবং সম্প্রদায়টিকে তারা যেভাবে চায় সেভাবে এটি তৈরি করতে দেয়।
আদিল এইচ। রাজা

এটি "টেবিল তৈরি করুন" স্ক্রিপ্ট থেকে সি # ক্লাস তৈরি করে না,
মেহমেট

12

আমি আমার 2 সেন্ট দেওয়ার চেষ্টা করছি

0) কোয়েরি ফার্স্ট https://marketplace.visualstudio.com/items?itemName=bbsimonbb.QueryFrst কোয়েরি প্রথমটি সি # প্রকল্পে এসকিউএল এর সাথে বুদ্ধিমানের সাথে কাজ করার জন্য একটি ভিজ্যুয়াল স্টুডিও এক্সটেনশন। আপনার প্রশ্নের বিকাশ করতে সরবরাহিত। এসকিউএল টেম্পলেট ব্যবহার করুন। আপনি যখন ফাইলটি সংরক্ষণ করেন, ক্যোরি-প্রথমে আপনার ক্যোয়ারি চালায়, স্কিমাটি পুনরুদ্ধার করে এবং দুটি শ্রেণি এবং একটি ইন্টারফেস উত্পন্ন করে: পদ্ধতিগুলি এক্সিকিউট (), এক্সিকিউটিসকলার (), এক্সিকিউটননকুইয়ারি () ইত্যাদি সহ একটি র‌্যাপার ক্লাস, তার সম্পর্কিত ইন্টারফেস এবং একটি পোকো এনক্যাপসুলেটিং ফলাফলের একটি লাইন।এখানে চিত্র বর্ণনা লিখুন

1) স্কেল 2 অজেক্টস কোনও প্রশ্নের ফলাফল থেকে শুরু করে ক্লাস তৈরি করে (তবে ডাল নয়) এখানে চিত্র বর্ণনা লিখুন

2) https://docs.microsoft.com/en-us/ef/ef6/resources/tools এখানে চিত্র বর্ণনা লিখুন

3) https://visualstudiomagazine.com/articles/2012/12/11/sqlqueryresults-code-generation.aspx এখানে চিত্র বর্ণনা লিখুন

4) http://www.codesmithtools.com / পণ্য / জেনারেটর # ফিচার


9

হ্যাঁ এগুলি দুর্দান্ত যদি আপনি ড্যাপারের মতো কোনও সাধারণ ওআরএম ব্যবহার করেন।

আপনি যদি নেট ব্যবহার করে থাকেন তবে আপনি WritXMLSchema পদ্ধতিটি ব্যবহার করে যে কোনও ডেটাসেটের সাহায্যে রান সময়ে এক্সএসডি ফাইল তৈরি করতে পারেন। http://msdn.microsoft.com/en-us/library/xt7k72x8(v=vs.110).aspx

এটার মত:

using (SqlConnection cnn = new SqlConnection(mConnStr)) {
DataSet Data = new DataSet();
cnn.Open();
string sql = "SELECT * FROM Person";

using (SqlDataAdapter Da = new SqlDataAdapter(sql, cnn))
{
try
{
    Da.Fill(Data);
    Da.TableMappings.Add("Table", "Person");
    Data.WriteXmlSchema(@"C:\Person.xsd");
}
catch (Exception ex)
{ MessageBox.Show(ex.Message); }
}
cnn.Close();

সেখান থেকে আপনি একটি ক্লাস তৈরি করতে xsd.exe ব্যবহার করতে পারেন যা বিকাশকারী কমান্ড প্রম্পট থেকে এক্সএমএল সিরিয়ালযোগ্য। http://msdn.microsoft.com/en-us/library/x6c1kb0s(v=vs.110).aspx

এটার মত:

xsd C:\Person.xsd /classes /language:CS

8

নালাগুলি বৈশিষ্ট্যগুলি মুদ্রণ করতে, এটি ব্যবহার করুন।
এটি CASEবিবৃতি ব্লকের জন্য অ্যালেক্স আজার স্ক্রিপ্টে কিছুটা পরিবর্তন করেছে ।

declare @TableName sysname = 'TableName'
declare @result varchar(max) = 'public class ' + @TableName + '
{'

select @result = @result + '
    public ' + ColumnType + ' ' + ColumnName + ' { get; set; }
'
from
(
    select 
        replace(col.name, ' ', '_') ColumnName,
        column_id,
        case typ.name 
            when 'bigint' then 'long'
            when 'binary' then 'byte[]'
            when 'bit' then 'bool'
            when 'char' then 'string'
            when 'date' then 'DateTime'
            when 'datetime' then 'DateTime'
            when 'datetime2' then 'DateTime'
            when 'datetimeoffset' then 'DateTimeOffset'
            when 'decimal' then 'decimal'
            when 'float' then 'float'
            when 'image' then 'byte[]'
            when 'int' then 'int'
            when 'money' then 'decimal'
            when 'nchar' then 'char'
            when 'ntext' then 'string'
            when 'numeric' then 'decimal'
            when 'nvarchar' then 'string'
            when 'real' then 'double'
            when 'smalldatetime' then 'DateTime'
            when 'smallint' then 'short'
            when 'smallmoney' then 'decimal'
            when 'text' then 'string'
            when 'time' then 'TimeSpan'
            when 'timestamp' then 'DateTime'
            when 'tinyint' then 'byte'
            when 'uniqueidentifier' then 'Guid'
            when 'varbinary' then 'byte[]'
            when 'varchar' then 'string'
            else 'UNKNOWN_' + typ.name
        end + 
        CASE
            WHEN col.is_nullable=1 AND
                 typ.name NOT IN (
                     'binary', 'varbinary', 'image',
                     'text', 'ntext',
                     'varchar', 'nvarchar', 'char', 'nchar')
            THEN '?'
            ELSE '' END AS [ColumnType]
    from sys.columns col
        join sys.types typ on
            col.system_type_id = typ.system_type_id AND col.user_type_id = typ.user_type_id 
    where object_id = object_id(@TableName)
) t
order by column_id

set @result = @result  + '
}'

print @result

5

আমি উপরের পরামর্শগুলি ব্যবহার করার চেষ্টা করেছি এবং প্রক্রিয়াটিতে এই থ্রেডের সমাধানগুলির উপরে উন্নতি করেছি।

আমাদের বলুন যে আপনি একটি বেস ক্লাস ব্যবহার করেন (এই ক্ষেত্রে পর্যবেক্ষণযোগ্য অবজেক্ট) যা প্রপার্টি চেঞ্জড ইভেন্টটি প্রয়োগ করে, আপনি এরকম কিছু করবেন। আমি সম্ভবত আমার ব্লগ sqljana.wordpress.com এ একদিন একটি ব্লগ পোস্ট লিখব

প্রথম তিনটি ভেরিয়েবলের জন্য মানগুলি প্রতিস্থাপন করুন:

    --These three things have to be substituted (when called from Powershell, they are replaced before execution)
DECLARE @Schema VARCHAR(MAX) = N'&Schema'
DECLARE @TableName VARCHAR(MAX) = N'&TableName'
DECLARE @Namespace VARCHAR(MAX) = N'&Namespace'

DECLARE @CRLF VARCHAR(2) = CHAR(13) + CHAR(10);
DECLARE @result VARCHAR(max) = ' '

DECLARE @PrivateProp VARCHAR(100) = @CRLF + 
                CHAR(9) + CHAR(9) + 'private <ColumnType> _<ColumnName>;';
DECLARE @PublicProp VARCHAR(255) = @CRLF + 
                CHAR(9) + CHAR(9) + 'public <ColumnType> <ColumnName> '  + @CRLF +
                CHAR(9) + CHAR(9) + '{ ' + @CRLF +
                CHAR(9) + CHAR(9) + '   get { return _<ColumnName>; } ' + @CRLF +
                CHAR(9) + CHAR(9) + '   set ' + @CRLF +
                CHAR(9) + CHAR(9) + '   { ' + @CRLF +
                CHAR(9) + CHAR(9) + '       _<ColumnName> = value;' + @CRLF +
                CHAR(9) + CHAR(9) + '       base.RaisePropertyChanged();' + @CRLF +
                CHAR(9) + CHAR(9) + '   } ' + @CRLF +
                CHAR(9) + CHAR(9) + '}' + @CRLF;

DECLARE @RPCProc VARCHAR(MAX) = @CRLF +         
                CHAR(9) + CHAR(9) + 'public event PropertyChangedEventHandler PropertyChanged; ' + @CRLF +
                CHAR(9) + CHAR(9) + 'private void RaisePropertyChanged( ' + @CRLF +
                CHAR(9) + CHAR(9) + '       [CallerMemberName] string caller = "" ) ' + @CRLF +
                CHAR(9) + CHAR(9) + '{  ' + @CRLF +
                CHAR(9) + CHAR(9) + '   if (PropertyChanged != null)  ' + @CRLF +
                CHAR(9) + CHAR(9) + '   { ' + @CRLF +
                CHAR(9) + CHAR(9) + '       PropertyChanged( this, new PropertyChangedEventArgs( caller ) );  ' + @CRLF +
                CHAR(9) + CHAR(9) + '   } ' + @CRLF +
                CHAR(9) + CHAR(9) + '}';

DECLARE @PropChanged VARCHAR(200) =  @CRLF +            
                CHAR(9) + CHAR(9) + 'protected override void AfterPropertyChanged(string propertyName) ' + @CRLF +
                CHAR(9) + CHAR(9) + '{ ' + @CRLF +
                CHAR(9) + CHAR(9) + '   System.Diagnostics.Debug.WriteLine("' + @TableName + ' property changed: " + propertyName); ' + @CRLF +
                CHAR(9) + CHAR(9) + '}';

SET @result = 'using System;' + @CRLF + @CRLF +
                'using MyCompany.Business;' + @CRLF + @CRLF +
                'namespace ' + @Namespace  + @CRLF + '{' + @CRLF +
                '   public class ' + @TableName + ' : ObservableObject' + @CRLF + 
                '   {' + @CRLF +
                '   #region Instance Properties' + @CRLF 

SELECT @result = @result
                 + 
                REPLACE(
                            REPLACE(@PrivateProp
                            , '<ColumnName>', ColumnName)
                        , '<ColumnType>', ColumnType)
                +                           
                REPLACE(
                            REPLACE(@PublicProp
                            , '<ColumnName>', ColumnName)
                        , '<ColumnType>', ColumnType)                   
FROM
(
    SELECT  c.COLUMN_NAME   AS ColumnName 
        , CASE c.DATA_TYPE   
            WHEN 'bigint' THEN
                CASE C.IS_NULLABLE
                    WHEN 'YES' THEN 'Int64?' ELSE 'Int64' END
            WHEN 'binary' THEN 'Byte[]'
            WHEN 'bit' THEN 
                CASE C.IS_NULLABLE
                    WHEN 'YES' THEN 'Boolean?' ELSE 'Boolean' END            
            WHEN 'char' THEN 'String'
            WHEN 'date' THEN
                CASE C.IS_NULLABLE
                    WHEN 'YES' THEN 'DateTime?' ELSE 'DateTime' END                        
            WHEN 'datetime' THEN
                CASE C.IS_NULLABLE
                    WHEN 'YES' THEN 'DateTime?' ELSE 'DateTime' END                        
            WHEN 'datetime2' THEN  
                CASE C.IS_NULLABLE
                    WHEN 'YES' THEN 'DateTime?' ELSE 'DateTime' END                        
            WHEN 'datetimeoffset' THEN 
                CASE C.IS_NULLABLE
                    WHEN 'YES' THEN 'DateTimeOffset?' ELSE 'DateTimeOffset' END                                    
            WHEN 'decimal' THEN  
                CASE C.IS_NULLABLE
                    WHEN 'YES' THEN 'Decimal?' ELSE 'Decimal' END                                    
            WHEN 'float' THEN 
                CASE C.IS_NULLABLE
                    WHEN 'YES' THEN 'Single?' ELSE 'Single' END                                    
            WHEN 'image' THEN 'Byte[]'
            WHEN 'int' THEN  
                CASE C.IS_NULLABLE
                    WHEN 'YES' THEN 'Int32?' ELSE 'Int32' END
            WHEN 'money' THEN
                CASE C.IS_NULLABLE
                    WHEN 'YES' THEN 'Decimal?' ELSE 'Decimal' END                                                
            WHEN 'nchar' THEN 'String'
            WHEN 'ntext' THEN 'String'
            WHEN 'numeric' THEN
                CASE C.IS_NULLABLE
                    WHEN 'YES' THEN 'Decimal?' ELSE 'Decimal' END                                                            
            WHEN 'nvarchar' THEN 'String'
            WHEN 'real' THEN 
                CASE C.IS_NULLABLE
                    WHEN 'YES' THEN 'Double?' ELSE 'Double' END                                                                        
            WHEN 'smalldatetime' THEN 
                CASE C.IS_NULLABLE
                    WHEN 'YES' THEN 'DateTime?' ELSE 'DateTime' END                                    
            WHEN 'smallint' THEN 
                CASE C.IS_NULLABLE
                    WHEN 'YES' THEN 'Int16?' ELSE 'Int16'END            
            WHEN 'smallmoney' THEN  
                CASE C.IS_NULLABLE
                    WHEN 'YES' THEN 'Decimal?' ELSE 'Decimal' END                                                                        
            WHEN 'text' THEN 'String'
            WHEN 'time' THEN 
                CASE C.IS_NULLABLE
                    WHEN 'YES' THEN 'TimeSpan?' ELSE 'TimeSpan' END                                                                                    
            WHEN 'timestamp' THEN 
                CASE C.IS_NULLABLE
                    WHEN 'YES' THEN 'DateTime?' ELSE 'DateTime' END                                    
            WHEN 'tinyint' THEN 
                CASE C.IS_NULLABLE
                    WHEN 'YES' THEN 'Byte?' ELSE 'Byte' END                                                
            WHEN 'uniqueidentifier' THEN 'Guid'
            WHEN 'varbinary' THEN 'Byte[]'
            WHEN 'varchar' THEN 'String'
            ELSE 'Object'
        END AS ColumnType
        , c.ORDINAL_POSITION 
FROM    INFORMATION_SCHEMA.COLUMNS c
WHERE   c.TABLE_NAME = @TableName 
    AND ISNULL(@Schema, c.TABLE_SCHEMA) = c.TABLE_SCHEMA  
) t
ORDER BY t.ORDINAL_POSITION

SELECT @result = @result + @CRLF + 
                CHAR(9) + '#endregion Instance Properties' + @CRLF +
                --CHAR(9) + @RPCProc + @CRLF +
                CHAR(9) + @PropChanged + @CRLF +
                CHAR(9) + '}' + @CRLF +
                @CRLF + '}' 
--SELECT @result
PRINT @result

বেস শ্রেণিটি এখানে জোশ স্মিথের নিবন্ধের উপর ভিত্তি করে তৈরি করা হয়েছে http://joshsmithonwpf.wordpress.com/2007/08/29/a-base-class-With- উপাদান-inotifypropertychanged/

আমি ক্লাসটির নামটি পর্যবেক্ষণযোগ্য অবজেক্ট বলে নামকরণ করেছি এবং কলার মেম্বারনাম বৈশিষ্ট্যটি ব্যবহার করে এসি # 5 বৈশিষ্ট্যের সুবিধাও নিয়েছি

//From http://joshsmithonwpf.wordpress.com/2007/08/29/a-base-class-which-implements-inotifypropertychanged/
//
//Jana's change: Used c# 5 feature to bypass passing in the property name using [CallerMemberName] 
//  protected void RaisePropertyChanged([CallerMemberName] string propertyName = "")

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;

namespace MyCompany.Business
{

    /// <summary>
    /// Implements the INotifyPropertyChanged interface and 
    /// exposes a RaisePropertyChanged method for derived 
    /// classes to raise the PropertyChange event.  The event 
    /// arguments created by this class are cached to prevent 
    /// managed heap fragmentation.
    /// </summary>
    [Serializable]
    public abstract class ObservableObject : INotifyPropertyChanged
    {
        #region Data

        private static readonly Dictionary<string, PropertyChangedEventArgs> eventArgCache;
        private const string ERROR_MSG = "{0} is not a public property of {1}";

        #endregion // Data

        #region Constructors

        static ObservableObject()
        {
            eventArgCache = new Dictionary<string, PropertyChangedEventArgs>();
        }

        protected ObservableObject()
        {
        }

        #endregion // Constructors

        #region Public Members

        /// <summary>
        /// Raised when a public property of this object is set.
        /// </summary>
        [field: NonSerialized]
        public event PropertyChangedEventHandler PropertyChanged;

        /// <summary>
        /// Returns an instance of PropertyChangedEventArgs for 
        /// the specified property name.
        /// </summary>
        /// <param name="propertyName">
        /// The name of the property to create event args for.
        /// </param>        
        public static PropertyChangedEventArgs
            GetPropertyChangedEventArgs(string propertyName)
        {
            if (String.IsNullOrEmpty(propertyName))
                throw new ArgumentException(
                    "propertyName cannot be null or empty.");

            PropertyChangedEventArgs args;

            // Get the event args from the cache, creating them
            // and adding to the cache if necessary.
            lock (typeof(ObservableObject))
            {
                bool isCached = eventArgCache.ContainsKey(propertyName);
                if (!isCached)
                {
                    eventArgCache.Add(
                        propertyName,
                        new PropertyChangedEventArgs(propertyName));
                }

                args = eventArgCache[propertyName];
            }

            return args;
        }

        #endregion // Public Members

        #region Protected Members

        /// <summary>
        /// Derived classes can override this method to
        /// execute logic after a property is set. The 
        /// base implementation does nothing.
        /// </summary>
        /// <param name="propertyName">
        /// The property which was changed.
        /// </param>
        protected virtual void AfterPropertyChanged(string propertyName)
        {
        }

        /// <summary>
        /// Attempts to raise the PropertyChanged event, and 
        /// invokes the virtual AfterPropertyChanged method, 
        /// regardless of whether the event was raised or not.
        /// </summary>
        /// <param name="propertyName">
        /// The property which was changed.
        /// </param>
        protected void RaisePropertyChanged([CallerMemberName] string propertyName = "")
        {
            this.VerifyProperty(propertyName);

            PropertyChangedEventHandler handler = this.PropertyChanged;
            if (handler != null)
            {
                // Get the cached event args.
                PropertyChangedEventArgs args =
                    GetPropertyChangedEventArgs(propertyName);

                // Raise the PropertyChanged event.
                handler(this, args);
            }

            this.AfterPropertyChanged(propertyName);
        }

        #endregion // Protected Members

        #region Private Helpers

        [Conditional("DEBUG")]
        private void VerifyProperty(string propertyName)
        {
            Type type = this.GetType();

            // Look for a public property with the specified name.
            PropertyInfo propInfo = type.GetProperty(propertyName);

            if (propInfo == null)
            {
                // The property could not be found,
                // so alert the developer of the problem.

                string msg = string.Format(
                    ERROR_MSG,
                    propertyName,
                    type.FullName);

                Debug.Fail(msg);
            }
        }

        #endregion // Private Helpers
    }
}

আপনি যে অংশটি আরও কিছু পছন্দ করতে চলেছেন তা এখানে। আমি এসকিউএল ডাটাবেসে সমস্ত টেবিলের জন্য উত্পন্ন করার জন্য একটি পাওয়ারশেল স্ক্রিপ্ট তৈরি করেছি। এটি চ্যাড মিলারের ইনভোক-এসকিউএলসিএমডি 2 সেমিডলেট নামের পাওয়ারশেল গুরুর উপর ভিত্তি করে তৈরি করা যেতে পারে যা এখান থেকে ডাউনলোড করা যেতে পারে: http://gallery.technet.microsoft.com/ScriptCenter/7985b7ef-ed89-4dfd-b02a-433cc4e30894/

আপনার সেই সেমিডলেটটি হয়ে গেলে, সমস্ত টেবিলের জন্য পাওয়ারশেল স্ক্রিপ্ট তৈরি করা সহজ হয়ে যায় (আপনার নির্দিষ্ট মানগুলির সাথে ভেরিয়েবলগুলি প্রতিস্থাপন করুন)।

. C:\MyScripts\Invoke-Sqlcmd2.ps1

$serverInstance = "MySQLInstance"
$databaseName = "MyDb"
$generatorSQLFile = "C:\MyScripts\ModelGen.sql" 
$tableListSQL = "SELECT name FROM $databaseName.sys.tables"
$outputFolder = "C:\MyScripts\Output\"
$namespace = "MyCompany.Business"

$placeHolderSchema = "&Schema"
$placeHolderTableName = "&TableName"
$placeHolderNamespace = "&Namespace"

#Get the list of tables in the database to generate c# models for
$tables = Invoke-Sqlcmd2 -ServerInstance $serverInstance -Database $databaseName -Query $tableListSQL -As DataRow -Verbose

foreach ($table in $tables)
{
    $table1 = $table[0]
    $outputFile = "$outputFolder\$table1.cs"


    #Replace variables with values (returns an array that we convert to a string to use as query)
    $generatorSQLFileWSubstitutions = (Get-Content $generatorSQLFile).
                                            Replace($placeHolderSchema,"dbo").
                                            Replace($placeHolderTableName, $table1).
                                            Replace($placeHolderNamespace, $namespace) | Out-String

    "Ouputing for $table1 to $outputFile"

    #The command generates .cs file content for model using "PRINT" statements which then gets written to verbose output (stream 4)
    # ...capture the verbose output and redirect to a file
    (Invoke-Sqlcmd2 -ServerInstance $serverInstance -Database $databaseName -Query $generatorSQLFileWSubstitutions -Verbose) 4> $outputFile

}

আমি এটি জিজ্ঞাসা করার পরে এটি 3 বছরের বেশি সময় হয়েছে এবং আমি এই মুহুর্তে এসকিএল ডেটাবেসগুলির সাথে কাজ করি না (বড় ডেটা, মংডোব ইত্যাদি)। তবে আমি অবশ্যই খুব শীঘ্রই এটি পরীক্ষা করে নেব, আপনি এই উত্তরটি বিস্তারিতভাবে ব্যাখ্যা করতে এবং সম্প্রদায়কে অবদান রাখার জন্য দুর্দান্ত সময় কাটিয়েছিলেন। তোমাকে অনেক ধন্যবাদ!
গুই

3
আমি দীর্ঘদিন ধরে স্ট্যাকওভারফ্লো ব্যবহার করছি তবে এখনই অবদান শুরু করে। সুতরাং, আপনি বলতে পারেন যে আমি খুব শিষ্টাচার শিখতে শুরু করছি। আমি যখন এর মতো সমাধানের সন্ধান করছিলাম তখন আমি এই থ্রেডটিতে হোঁচট খেয়েছি এবং কেবল আমার বর্ধিত সমাধান যুক্ত করেছি যাতে ভবিষ্যতের ব্যবহারকারীরা এটি থেকে উপকৃত হতে পারেন। আপনার মন্তব্যের জন্য ধন্যবাদ.
জানা সাত্তেনাথন

ধন্যবাদ। পাওয়ারসেল ব্যবহার না করে এই সমস্ত কি কি tsql স্ক্রিপ্টে করা সম্ভব?
নিকো

5

আপনার যদি এসকিউএল সার্ভার 2016 এ অ্যাক্সেস থাকে তবে আপনি একটি নির্বাচিত বিবৃতি থেকে জেএসএন আউটপুট পেতে ফর জেএসএন (INCLUDE_NULL_VALUES সহ) বিকল্পটি ব্যবহার করতে পারেন। আউটপুট অনুলিপি করুন, তারপরে ভিজ্যুয়াল স্টুডিওতে, বিশেষ -> জেএসএনকে শ্রেণি হিসাবে আটকান।

বাজেটের সমাধানের মতো, তবে কিছুটা সময় সাশ্রয় হতে পারে।


3

টেমপ্লেট ব্যবহার করে কাস্টম কোড তৈরি করার জন্য প্রক্রিয়া তৈরি করুন

create PROCEDURE [dbo].[createCode]
(   
   @TableName sysname = '',
   @befor varchar(max)='public class  @TableName  
{',
   @templet varchar(max)=' 
     public @ColumnType @ColumnName   { get; set; }  // @ColumnDesc  ',
   @after varchar(max)='
}'

)
AS
BEGIN 


declare @result varchar(max)

set @befor =replace(@befor,'@TableName',@TableName)

set @result=@befor

select @result = @result 
+ replace(replace(replace(replace(replace(@templet,'@ColumnType',ColumnType) ,'@ColumnName',ColumnName) ,'@ColumnDesc',ColumnDesc),'@ISPK',ISPK),'@max_length',max_length)

from  
(
    select 
    column_id,
    replace(col.name, ' ', '_') ColumnName,
    typ.name as sqltype,
    typ.max_length,
    is_identity,
    pkk.ISPK, 
        case typ.name 
            when 'bigint' then 'long'
            when 'binary' then 'byte[]'
            when 'bit' then 'bool'
            when 'char' then 'String'
            when 'date' then 'DateTime'
            when 'datetime' then 'DateTime'
            when 'datetime2' then 'DateTime'
            when 'datetimeoffset' then 'DateTimeOffset'
            when 'decimal' then 'decimal'
            when 'float' then 'float'
            when 'image' then 'byte[]'
            when 'int' then 'int'
            when 'money' then 'decimal'
            when 'nchar' then 'char'
            when 'ntext' then 'string'
            when 'numeric' then 'decimal'
            when 'nvarchar' then 'String'
            when 'real' then 'double'
            when 'smalldatetime' then 'DateTime'
            when 'smallint' then 'short'
            when 'smallmoney' then 'decimal'
            when 'text' then 'String'
            when 'time' then 'TimeSpan'
            when 'timestamp' then 'DateTime'
            when 'tinyint' then 'byte'
            when 'uniqueidentifier' then 'Guid'
            when 'varbinary' then 'byte[]'
            when 'varchar' then 'string'
            else 'UNKNOWN_' + typ.name
        END + CASE WHEN col.is_nullable=1 AND typ.name NOT IN ('binary', 'varbinary', 'image', 'text', 'ntext', 'varchar', 'nvarchar', 'char', 'nchar') THEN '?' ELSE '' END ColumnType,
      isnull(colDesc.colDesc,'') AS ColumnDesc 
    from sys.columns col
        join sys.types typ on
            col.system_type_id = typ.system_type_id AND col.user_type_id = typ.user_type_id
            left join
            (
                SELECT c.name  AS 'ColumnName', CASE WHEN dd.pk IS NULL THEN 'false' ELSE 'true' END ISPK           
                FROM        sys.columns c
                    JOIN    sys.tables  t   ON c.object_id = t.object_id    
                    LEFT JOIN (SELECT   K.COLUMN_NAME , C.CONSTRAINT_TYPE as pk  
                        FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS K 
                            LEFT JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS C
                        ON K.TABLE_NAME = C.TABLE_NAME
                            AND K.CONSTRAINT_NAME = C.CONSTRAINT_NAME
                            AND K.CONSTRAINT_CATALOG = C.CONSTRAINT_CATALOG
                            AND K.CONSTRAINT_SCHEMA = C.CONSTRAINT_SCHEMA            
                        WHERE K.TABLE_NAME = @TableName) as dd
                     ON dd.COLUMN_NAME = c.name
                 WHERE       t.name = @TableName       
            ) pkk  on ColumnName=col.name

    OUTER APPLY (
    SELECT TOP 1 CAST(value AS NVARCHAR(max)) AS colDesc
    FROM
       sys.extended_properties
    WHERE
       major_id = col.object_id
       AND
       minor_id = COLUMNPROPERTY(major_id, col.name, 'ColumnId')
    ) colDesc      
    where object_id = object_id(@TableName)

    ) t

    set @result=@result+@after

    select @result
    --print @result

END

এখন কাস্টম কোড তৈরি করুন

উদাহরণস্বরূপ সি # বর্গ

exec [createCode] @TableName='book',@templet =' 
     public @ColumnType @ColumnName   { get; set; }  // @ColumnDesc  '

আউটপুট হয়

public class  book  
{ 
     public long ID   { get; set; }  //    
     public String Title   { get; set; }  // Book Title  
}

লিনকুইয়ের জন্য

exec [createCode] @TableName='book'
, @befor  ='[System.Data.Linq.Mapping.Table(Name = "@TableName")]
public class @TableName
{',

   @templet  =' 
     [System.Data.Linq.Mapping.Column(Name = "@ColumnName", IsPrimaryKey = @ISPK)]
     public @ColumnType @ColumnName   { get; set; }  // @ColumnDesc  
     ' ,

   @after  ='
}'

আউটপুট হয়

[System.Data.Linq.Mapping.Table(Name = "book")]
public class book
{ 
     [System.Data.Linq.Mapping.Column(Name = "ID", IsPrimaryKey = true)]
     public long ID   { get; set; }  //   

     [System.Data.Linq.Mapping.Column(Name = "Title", IsPrimaryKey = false)]
     public String Title   { get; set; }  // Book Title  

}

জাভা ক্লাসের জন্য

exec [createCode] @TableName='book',@templet =' 
     public @ColumnType @ColumnName ; // @ColumnDesc  
     public @ColumnType get@ColumnName()
     {
        return this.@ColumnName;
     }
     public void set@ColumnName(@ColumnType @ColumnName)
     {
        this.@ColumnName=@ColumnName;
     }

     '

আউটপুট হয়

public class  book  
{ 
     public long ID ; //   
     public long getID()
     {
        return this.ID;
     }
     public void setID(long ID)
     {
        this.ID=ID;
     }


     public String Title ; // Book Title  
     public String getTitle()
     {
        return this.Title;
     }
     public void setTitle(String Title)
     {
        this.Title=Title;
     } 
}

অ্যান্ড্রয়েড চিনিরঅর্ম মডেলের জন্য

exec [createCode] @TableName='book'
, @befor  ='@Table(name = "@TableName")
public class @TableName
{',
   @templet  =' 
     @Column(name = "@ColumnName")
     public @ColumnType @ColumnName ;// @ColumnDesc  
     ' ,
   @after  ='
}'

আউটপুট হয়

@Table(name = "book")
public class book
{ 
     @Column(name = "ID")
     public long ID ;//   

     @Column(name = "Title")
     public String Title ;// Book Title  

}

2

কমেন্টস (সংক্ষিপ্তসার) সহ নূন্য বৈশিষ্ট্যগুলি মুদ্রণ করতে, এটি ব্যবহার করুন।
এটি প্রথম উত্তরের সামান্য পরিবর্তন is

declare @TableName sysname = 'TableName'
declare @result varchar(max) = 'public class ' + @TableName + '
{'
select @result = @result 
+ CASE WHEN ColumnDesc IS NOT NULL THEN '
    /// <summary>
    /// ' + ColumnDesc + '
    /// </summary>' ELSE '' END
+ '
    public ' + ColumnType + ' ' + ColumnName + ' { get; set; }'
from
(
    select 
        replace(col.name, ' ', '_') ColumnName,
        column_id,
        case typ.name 
            when 'bigint' then 'long'
            when 'binary' then 'byte[]'
            when 'bit' then 'bool'
            when 'char' then 'String'
            when 'date' then 'DateTime'
            when 'datetime' then 'DateTime'
            when 'datetime2' then 'DateTime'
            when 'datetimeoffset' then 'DateTimeOffset'
            when 'decimal' then 'decimal'
            when 'float' then 'float'
            when 'image' then 'byte[]'
            when 'int' then 'int'
            when 'money' then 'decimal'
            when 'nchar' then 'char'
            when 'ntext' then 'string'
            when 'numeric' then 'decimal'
            when 'nvarchar' then 'String'
            when 'real' then 'double'
            when 'smalldatetime' then 'DateTime'
            when 'smallint' then 'short'
            when 'smallmoney' then 'decimal'
            when 'text' then 'String'
            when 'time' then 'TimeSpan'
            when 'timestamp' then 'DateTime'
            when 'tinyint' then 'byte'
            when 'uniqueidentifier' then 'Guid'
            when 'varbinary' then 'byte[]'
            when 'varchar' then 'string'
            else 'UNKNOWN_' + typ.name
        END + CASE WHEN col.is_nullable=1 AND typ.name NOT IN ('binary', 'varbinary', 'image', 'text', 'ntext', 'varchar', 'nvarchar', 'char', 'nchar') THEN '?' ELSE '' END ColumnType,
        colDesc.colDesc AS ColumnDesc
    from sys.columns col
        join sys.types typ on
            col.system_type_id = typ.system_type_id AND col.user_type_id = typ.user_type_id
    OUTER APPLY (
    SELECT TOP 1 CAST(value AS NVARCHAR(max)) AS colDesc
    FROM
       sys.extended_properties
    WHERE
       major_id = col.object_id
       AND
       minor_id = COLUMNPROPERTY(major_id, col.name, 'ColumnId')
    ) colDesc            
    where object_id = object_id(@TableName)
) t
order by column_id

set @result = @result  + '
}'

print @result

2

ভিজ্যুয়াল স্টুডিও ম্যাগাজিন এটি প্রকাশ করেছে:

এসকিউএল অনুসন্ধান ফলাফলের জন্য নেট নেট পোকো ক্লাস তৈরি করা হচ্ছে

এটির একটি ডাউনলোডযোগ্য প্রকল্প রয়েছে যা আপনি তৈরি করতে পারেন, এটি আপনার এসকিউএল তথ্য দিতে পারেন এবং এটি আপনার জন্য ক্লাসটি ক্র্যাঙ্ক করবে।

এখন যদি সেই সরঞ্জামটি কেবল নির্বাচন, INSERT এবং আপডেটের জন্য এসকিউএল কমান্ডগুলি তৈরি করে ....



1

আপনি এটি থেকে কী চান তা নিয়ে আমি বিভ্রান্ত হয়ে পড়েছি, তবে আপনি কী ডিজাইন করতে চান তা ডিজাইনের সময় এখানে সাধারণ বিকল্প রয়েছে।

  1. আপনার সংস্করণ ভিজ্যুয়াল স্টুডিওতে অন্তর্নির্মিত ORM ব্যবহার করা।
  2. আপনার কোড উদাহরণের অনুরূপ একটি লিখুন। যথারীতি, যদি আপনি নিশ্চিত না হন তবে একটি টিউটোরিয়ালটি আপনার সেরা বন্ধু।
  3. NHibernate এর মতো বিকল্প ORM ব্যবহার করুন ।

1

অ্যালেক্সের সমাধান এবং গিলহর্মের প্রশংসা করার জন্য আমি মাইএসকিউএল এর জন্য সি # ক্লাস তৈরি করতে চাইছি

set @schema := 'schema_name';
set @table := 'table_name';
SET group_concat_max_len = 2048;
SELECT 
    concat('public class ', @table, '\n{\n', GROUP_CONCAT(a.property_ SEPARATOR '\n'), '\n}') class_
FROM 
    (select
        CONCAT(
        '\tpublic ',
        case 
            when DATA_TYPE = 'bigint' then 'long'
            when DATA_TYPE = 'BINARY' then 'byte[]'
            when DATA_TYPE = 'bit' then 'bool'
            when DATA_TYPE = 'char' then 'string'
            when DATA_TYPE = 'date' then 'DateTime'
            when DATA_TYPE = 'datetime' then 'DateTime'
            when DATA_TYPE = 'datetime2' then 'DateTime'
            when DATA_TYPE = 'datetimeoffset' then 'DateTimeOffset'
            when DATA_TYPE = 'decimal' then 'decimal'
            when DATA_TYPE = 'double' then 'double'
            when DATA_TYPE = 'float' then 'float'
            when DATA_TYPE = 'image' then 'byte[]'
            when DATA_TYPE = 'int' then 'int'
            when DATA_TYPE = 'money' then 'decimal'
            when DATA_TYPE = 'nchar' then 'char'
            when DATA_TYPE = 'ntext' then 'string'
            when DATA_TYPE = 'numeric' then 'decimal'
            when DATA_TYPE = 'nvarchar' then 'string'
            when DATA_TYPE = 'real' then 'double'
            when DATA_TYPE = 'smalldatetime' then 'DateTime'
            when DATA_TYPE = 'smallint' then 'short'
            when DATA_TYPE = 'smallmoney' then 'decimal'
            when DATA_TYPE = 'text' then 'string'
            when DATA_TYPE = 'time' then 'TimeSpan'
            when DATA_TYPE = 'timestamp' then 'DateTime'
            when DATA_TYPE = 'tinyint' then 'byte'
            when DATA_TYPE = 'uniqueidentifier' then 'Guid'
            when DATA_TYPE = 'varbinary' then 'byte[]'
            when DATA_TYPE = 'varchar' then 'string'
            else '_UNKNOWN_'
        end, ' ', 
        COLUMN_NAME, ' {get; set;}') as property_
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE table_name = @table AND table_schema = @schema) a
;
Thanks Alex and Guilherme!

ধন্যবাদ! আমি শুধু এটি খুঁজছিলাম!
রজার ফার

1

গ্র্যাব কোয়েরি ফার্স্ট , ভিজ্যুয়াল স্টুডিও এক্সটেনশন যা এসকিউএল কোয়েরি থেকে মোড়ক ক্লাস তৈরি করে। আপনি কেবল পাবেন না ...

public class MyClass{
    public string MyProp{get;set;}
    public int MyNumberProp{get;set;}
    ...
}

এবং একটি বোনাস হিসাবে, এটি নিক্ষেপ করা হবে ...

public class MyQuery{
    public static IEnumerable<MyClass>Execute(){}
    public static MyClass GetOne(){}
    ...
}

আপনি কি নিশ্চিত যে আপনার ক্লাসগুলি সরাসরি আপনার টেবিলের উপর ভিত্তি করে রাখতে চান? টেবিলগুলি একটি স্ট্যাটিক, নরমালাইজড ডেটা স্টোরেজ ধারণা যা ডিবিতে অন্তর্ভুক্ত। শ্রেণিগুলি গতিশীল, তরল, নিষ্পত্তিযোগ্য, প্রসঙ্গ-নির্দিষ্ট, সম্ভবত অস্বীকৃত। কোনও অপারেশনের জন্য আপনি যে ডেটা চান তার জন্য কেন সত্য প্রশ্নগুলি লিখবেন না এবং কোয়েরি ফার্স্টকে সেখান থেকে ক্লাস তৈরি করতে দিন।


1

এই পোস্টটি আমাকে বেশ কয়েকবার বাঁচিয়েছে। আমি কেবল আমার দুটি সেন্ট যুক্ত করতে চাই। যাঁরা ওআরএম ব্যবহার করতে চান না এবং পরিবর্তে তাদের নিজস্ব ডএএল ক্লাস লিখেন, যখন আপনি কোনও টেবিলে 20 টি কলাম পছন্দ করেন এবং 40 টি আলাদা আলাদা টেবিল তাদের নিজ নিজ CRUD ক্রিয়াকলাপ সহ, বেদনাদায়ক এবং সময় নষ্ট করে। আমি টেবিল সত্তা এবং বৈশিষ্ট্যের উপর ভিত্তি করে CRUD পদ্ধতি উত্পন্ন করার জন্য উপরের কোডটি পুনরাবৃত্তি করেছি।

 declare @TableName sysname = 'Tablename'
declare @Result varchar(max) = 'public class ' + @TableName + '
{'

select @Result = @Result + '
    public ' + ColumnType + NullableSign + ' ' + ColumnName + ' { get; set; }
'
from
(
    select 
        replace(col.name, ' ', '_') ColumnName,
        column_id ColumnId,
        case typ.name 
            when 'bigint' then 'long'
            when 'binary' then 'byte[]'
            when 'bit' then 'bool'
            when 'char' then 'string'
            when 'date' then 'DateTime'
            when 'datetime' then 'DateTime'
            when 'datetime2' then 'DateTime'
            when 'datetimeoffset' then 'DateTimeOffset'
            when 'decimal' then 'decimal'
            when 'float' then 'float'
            when 'image' then 'byte[]'
            when 'int' then 'int'
            when 'money' then 'decimal'
            when 'nchar' then 'char'
            when 'ntext' then 'string'
            when 'numeric' then 'decimal'
            when 'nvarchar' then 'string'
            when 'real' then 'double'
            when 'smalldatetime' then 'DateTime'
            when 'smallint' then 'short'
            when 'smallmoney' then 'decimal'
            when 'text' then 'string'
            when 'time' then 'TimeSpan'
            when 'timestamp' then 'DateTime'
            when 'tinyint' then 'byte'
            when 'uniqueidentifier' then 'Guid'
            when 'varbinary' then 'byte[]'
            when 'varchar' then 'string'
            else 'UNKNOWN_' + typ.name
        end ColumnType,
        case 
            when col.is_nullable = 1 and typ.name in ('bigint', 'bit', 'date', 'datetime', 'datetime2', 'datetimeoffset', 'decimal', 'float', 'int', 'money', 'numeric', 'real', 'smalldatetime', 'smallint', 'smallmoney', 'time', 'tinyint', 'uniqueidentifier') 
            then '?' 
            else '' 
        end NullableSign
    from sys.columns col
        join sys.types typ on
            col.system_type_id = typ.system_type_id AND col.user_type_id = typ.user_type_id
    where object_id = object_id(@TableName)
) t
order by ColumnId

set @Result = @Result  + '
}'

print @Result

declare @InitDataAccess varchar(max) = 'public class '+ @TableName +'DataAccess 
{ '

declare @ListStatement varchar(max) ='public List<'+@TableName+'> Get'+@TableName+'List()
{
 String conn = ConfigurationManager.ConnectionStrings["ConnectionNameInWeb.config"].ConnectionString;
 var itemList = new List<'+@TableName+'>();
          try
            {
                using (var sqlCon = new SqlConnection(conn))
                {
                    sqlCon.Open();
                    var cmd = new SqlCommand
                    {
                        Connection = sqlCon,
                        CommandType = CommandType.StoredProcedure,
                        CommandText = "StoredProcedureSelectAll"
                    };
                    SqlDataReader reader = cmd.ExecuteReader();
                    while (reader.Read())
                    {
                      var item = new '+@TableName+'();
' 
select @ListStatement = @ListStatement + '
item.'+ ColumnName + '= ('+ ColumnType + NullableSign  +')reader["'+ColumnName+'"];
'
from
(
    select 
        replace(col.name, ' ', '_') ColumnName,
        column_id ColumnId,
        case typ.name 
            when 'bigint' then 'long'
            when 'binary' then 'byte[]'
            when 'bit' then 'bool'
            when 'char' then 'string'
            when 'date' then 'DateTime'
            when 'datetime' then 'DateTime'
            when 'datetime2' then 'DateTime'
            when 'datetimeoffset' then 'DateTimeOffset'
            when 'decimal' then 'decimal'
            when 'float' then 'float'
            when 'image' then 'byte[]'
            when 'int' then 'int'
            when 'money' then 'decimal'
            when 'nchar' then 'char'
            when 'ntext' then 'string'
            when 'numeric' then 'decimal'
            when 'nvarchar' then 'string'
            when 'real' then 'double'
            when 'smalldatetime' then 'DateTime'
            when 'smallint' then 'short'
            when 'smallmoney' then 'decimal'
            when 'text' then 'string'
            when 'time' then 'TimeSpan'
            when 'timestamp' then 'DateTime'
            when 'tinyint' then 'byte'
            when 'uniqueidentifier' then 'Guid'
            when 'varbinary' then 'byte[]'
            when 'varchar' then 'string'
            else 'UNKNOWN_' + typ.name
        end ColumnType,
        case 
            when col.is_nullable = 1 and typ.name in ('bigint', 'bit', 'date', 'datetime', 'datetime2', 'datetimeoffset', 'decimal', 'float', 'int', 'money', 'numeric', 'real', 'smalldatetime', 'smallint', 'smallmoney', 'time', 'tinyint', 'uniqueidentifier') 
            then '?' 
            else '' 
        end NullableSign
    from sys.columns col
        join sys.types typ on
            col.system_type_id = typ.system_type_id AND col.user_type_id = typ.user_type_id
    where object_id = object_id(@TableName)
) t
order by ColumnId

select @ListStatement = @ListStatement +'
                        itemList.Add(item);
                    }

                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            return itemList;
        }'

declare @GetIndividual varchar(max) =  
'public '+@TableName+' Get'+@TableName+'()
{
 String conn = ConfigurationManager.ConnectionStrings["ConnectionNameInWeb.config"].ConnectionString;
 var item = new '+@TableName+'();
          try
            {
                using (var sqlCon = new SqlConnection(conn))
                {
                    sqlCon.Open();
                    var cmd = new SqlCommand
                    {
                        Connection = sqlCon,
                        CommandType = CommandType.StoredProcedure,
                        CommandText = "StoredProcedureSelectIndividual"
                    };
                     cmd.Parameters.AddWithValue("@ItemCriteria", item.id);
                    SqlDataReader reader = cmd.ExecuteReader();
                    if (reader.Read())
                    {' 
select @GetIndividual = @GetIndividual + '
item.'+ ColumnName + '= ('+ ColumnType + NullableSign  +')reader["'+ColumnName+'"];
'
from
(
    select 
        replace(col.name, ' ', '_') ColumnName,
        column_id ColumnId,
        case typ.name 
            when 'bigint' then 'long'
            when 'binary' then 'byte[]'
            when 'bit' then 'bool'
            when 'char' then 'string'
            when 'date' then 'DateTime'
            when 'datetime' then 'DateTime'
            when 'datetime2' then 'DateTime'
            when 'datetimeoffset' then 'DateTimeOffset'
            when 'decimal' then 'decimal'
            when 'float' then 'float'
            when 'image' then 'byte[]'
            when 'int' then 'int'
            when 'money' then 'decimal'
            when 'nchar' then 'char'
            when 'ntext' then 'string'
            when 'numeric' then 'decimal'
            when 'nvarchar' then 'string'
            when 'real' then 'double'
            when 'smalldatetime' then 'DateTime'
            when 'smallint' then 'short'
            when 'smallmoney' then 'decimal'
            when 'text' then 'string'
            when 'time' then 'TimeSpan'
            when 'timestamp' then 'DateTime'
            when 'tinyint' then 'byte'
            when 'uniqueidentifier' then 'Guid'
            when 'varbinary' then 'byte[]'
            when 'varchar' then 'string'
            else 'UNKNOWN_' + typ.name
        end ColumnType,
        case 
            when col.is_nullable = 1 and typ.name in ('bigint', 'bit', 'date', 'datetime', 'datetime2', 'datetimeoffset', 'decimal', 'float', 'int', 'money', 'numeric', 'real', 'smalldatetime', 'smallint', 'smallmoney', 'time', 'tinyint', 'uniqueidentifier') 
            then '?' 
            else '' 
        end NullableSign
    from sys.columns col
        join sys.types typ on
            col.system_type_id = typ.system_type_id AND col.user_type_id = typ.user_type_id
    where object_id = object_id(@TableName)
) t
order by ColumnId

select @GetIndividual = @GetIndividual +'

                    }

                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            return item;
        }'



declare @InsertStatement varchar(max) = 'public void  Insert'+@TableName+'('+@TableName+' item)
{
 String conn = ConfigurationManager.ConnectionStrings["ConnectionNameInWeb.config"].ConnectionString;

          try
            {
                using (var sqlCon = new SqlConnection(conn))
                {
                    sqlCon.Open();
                    var cmd = new SqlCommand
                    {
                        Connection = sqlCon,
                        CommandType = CommandType.StoredProcedure,
                        CommandText = "StoredProcedureInsert"
                    };

                    ' 
select @InsertStatement = @InsertStatement + '
 cmd.Parameters.AddWithValue("@'+ColumnName+'", item.'+ColumnName+');
'
from
(
    select 
        replace(col.name, ' ', '_') ColumnName,
        column_id ColumnId,
        case typ.name 
            when 'bigint' then 'long'
            when 'binary' then 'byte[]'
            when 'bit' then 'bool'
            when 'char' then 'string'
            when 'date' then 'DateTime'
            when 'datetime' then 'DateTime'
            when 'datetime2' then 'DateTime'
            when 'datetimeoffset' then 'DateTimeOffset'
            when 'decimal' then 'decimal'
            when 'float' then 'float'
            when 'image' then 'byte[]'
            when 'int' then 'int'
            when 'money' then 'decimal'
            when 'nchar' then 'char'
            when 'ntext' then 'string'
            when 'numeric' then 'decimal'
            when 'nvarchar' then 'string'
            when 'real' then 'double'
            when 'smalldatetime' then 'DateTime'
            when 'smallint' then 'short'
            when 'smallmoney' then 'decimal'
            when 'text' then 'string'
            when 'time' then 'TimeSpan'
            when 'timestamp' then 'DateTime'
            when 'tinyint' then 'byte'
            when 'uniqueidentifier' then 'Guid'
            when 'varbinary' then 'byte[]'
            when 'varchar' then 'string'
            else 'UNKNOWN_' + typ.name
        end ColumnType,
        case 
            when col.is_nullable = 1 and typ.name in ('bigint', 'bit', 'date', 'datetime', 'datetime2', 'datetimeoffset', 'decimal', 'float', 'int', 'money', 'numeric', 'real', 'smalldatetime', 'smallint', 'smallmoney', 'time', 'tinyint', 'uniqueidentifier') 
            then '?' 
            else '' 
        end NullableSign
    from sys.columns col
        join sys.types typ on
            col.system_type_id = typ.system_type_id AND col.user_type_id = typ.user_type_id
    where object_id = object_id(@TableName)
) t
order by ColumnId

select @InsertStatement = @InsertStatement +'

                    cmd.ExecuteNonQuery();

                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

        }'

declare @UpdateStatement varchar(max) = 'public void  Update'+@TableName+'('+@TableName+' item)
{
 String conn = ConfigurationManager.ConnectionStrings["ConnectionNameInWeb.config"].ConnectionString;

          try
            {
                using (var sqlCon = new SqlConnection(conn))
                {
                    sqlCon.Open();
                    var cmd = new SqlCommand
                    {
                        Connection = sqlCon,
                        CommandType = CommandType.StoredProcedure,
                        CommandText = "StoredProcedureUpdate"
                    };
                    cmd.Parameters.AddWithValue("@UpdateCriteria", item.Id);
                    ' 
select @UpdateStatement = @UpdateStatement + '
 cmd.Parameters.AddWithValue("@'+ColumnName+'", item.'+ColumnName+');
'
from
(
    select 
        replace(col.name, ' ', '_') ColumnName,
        column_id ColumnId,
        case typ.name 
            when 'bigint' then 'long'
            when 'binary' then 'byte[]'
            when 'bit' then 'bool'
            when 'char' then 'string'
            when 'date' then 'DateTime'
            when 'datetime' then 'DateTime'
            when 'datetime2' then 'DateTime'
            when 'datetimeoffset' then 'DateTimeOffset'
            when 'decimal' then 'decimal'
            when 'float' then 'float'
            when 'image' then 'byte[]'
            when 'int' then 'int'
            when 'money' then 'decimal'
            when 'nchar' then 'char'
            when 'ntext' then 'string'
            when 'numeric' then 'decimal'
            when 'nvarchar' then 'string'
            when 'real' then 'double'
            when 'smalldatetime' then 'DateTime'
            when 'smallint' then 'short'
            when 'smallmoney' then 'decimal'
            when 'text' then 'string'
            when 'time' then 'TimeSpan'
            when 'timestamp' then 'DateTime'
            when 'tinyint' then 'byte'
            when 'uniqueidentifier' then 'Guid'
            when 'varbinary' then 'byte[]'
            when 'varchar' then 'string'
            else 'UNKNOWN_' + typ.name
        end ColumnType,
        case 
            when col.is_nullable = 1 and typ.name in ('bigint', 'bit', 'date', 'datetime', 'datetime2', 'datetimeoffset', 'decimal', 'float', 'int', 'money', 'numeric', 'real', 'smalldatetime', 'smallint', 'smallmoney', 'time', 'tinyint', 'uniqueidentifier') 
            then '?' 
            else '' 
        end NullableSign
    from sys.columns col
        join sys.types typ on
            col.system_type_id = typ.system_type_id AND col.user_type_id = typ.user_type_id
    where object_id = object_id(@TableName)
) t
order by ColumnId

select @UpdateStatement = @UpdateStatement +'

                    cmd.ExecuteNonQuery();

                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

        }'

declare @EndDataAccess varchar(max)  = '
}'
 print @InitDataAccess
 print @GetIndividual
print @InsertStatement
print @UpdateStatement
print @ListStatement
print @EndDataAccess

অবশ্যই এটি বুলেটপ্রুফ কোড নয়, এবং উন্নত করা যেতে পারে। কেবল এই দুর্দান্ত সমাধানে অবদান রাখতে চেয়েছিলেন


1

শীর্ষ জবাব থেকে সামান্য পরিবর্তিত:

declare @TableName sysname = 'HistoricCommand'

declare @Result varchar(max) = '[System.Data.Linq.Mapping.Table(Name = "' + @TableName + '")]
public class Dbo' + @TableName + '
{'

select @Result = @Result + '
    [System.Data.Linq.Mapping.Column(Name = "' + t.ColumnName + '", IsPrimaryKey = ' + pkk.ISPK + ')]
    public ' + ColumnType + NullableSign + ' ' + t.ColumnName + ' { get; set; }
'
from
(
    select 
        replace(col.name, ' ', '_') ColumnName,
        column_id ColumnId,
        case typ.name 
            when 'bigint' then 'long'
            when 'binary' then 'byte[]'
            when 'bit' then 'bool'
            when 'char' then 'string'
            when 'date' then 'DateTime'
            when 'datetime' then 'DateTime'
            when 'datetime2' then 'DateTime'
            when 'datetimeoffset' then 'DateTimeOffset'
            when 'decimal' then 'decimal'
            when 'float' then 'float'
            when 'image' then 'byte[]'
            when 'int' then 'int'
            when 'money' then 'decimal'
            when 'nchar' then 'string'
            when 'ntext' then 'string'
            when 'numeric' then 'decimal'
            when 'nvarchar' then 'string'
            when 'real' then 'double'
            when 'smalldatetime' then 'DateTime'
            when 'smallint' then 'short'
            when 'smallmoney' then 'decimal'
            when 'text' then 'string'
            when 'time' then 'TimeSpan'
            when 'timestamp' then 'DateTime'
            when 'tinyint' then 'byte'
            when 'uniqueidentifier' then 'Guid'
            when 'varbinary' then 'byte[]'
            when 'varchar' then 'string'
            else 'UNKNOWN_' + typ.name
        end ColumnType,
        case 
            when col.is_nullable = 1 and typ.name in ('bigint', 'bit', 'date', 'datetime', 'datetime2', 'datetimeoffset', 'decimal', 'float', 'int', 'money', 'numeric', 'real', 'smalldatetime', 'smallint', 'smallmoney', 'time', 'tinyint', 'uniqueidentifier') 
            then '?' 
            else '' 
        end NullableSign
    from sys.columns col
        join sys.types typ on
            col.system_type_id = typ.system_type_id AND col.user_type_id = typ.user_type_id         
    where object_id = object_id(@TableName) 
) t, 
(
                SELECT c.name  AS 'ColumnName', CASE WHEN dd.pk IS NULL THEN 'false' ELSE 'true' END ISPK           
                FROM        sys.columns c
                    JOIN    sys.tables  t   ON c.object_id = t.object_id    
                    LEFT JOIN (SELECT   K.COLUMN_NAME , C.CONSTRAINT_TYPE as pk  
                        FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS K 
                            LEFT JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS C
                        ON K.TABLE_NAME = C.TABLE_NAME
                            AND K.CONSTRAINT_NAME = C.CONSTRAINT_NAME
                            AND K.CONSTRAINT_CATALOG = C.CONSTRAINT_CATALOG
                            AND K.CONSTRAINT_SCHEMA = C.CONSTRAINT_SCHEMA            
                        WHERE K.TABLE_NAME = @TableName) as dd
                     ON dd.COLUMN_NAME = c.name
                 WHERE       t.name = @TableName            
            ) pkk
where pkk.ColumnName = t.ColumnName
order by ColumnId

set @Result = @Result  + '
}'

print @Result

যা সি # ঘোষণায় পূর্ণ লিনকিউয়ের জন্য আউটপুট প্রয়োজনীয় করে তোলে

[System.Data.Linq.Mapping.Table(Name = "HistoricCommand")]
public class DboHistoricCommand
{
    [System.Data.Linq.Mapping.Column(Name = "HistoricCommandId", IsPrimaryKey = true)]
    public int HistoricCommandId { get; set; }

    [System.Data.Linq.Mapping.Column(Name = "PHCloudSoftwareInstanceId", IsPrimaryKey = true)]
    public int PHCloudSoftwareInstanceId { get; set; }

    [System.Data.Linq.Mapping.Column(Name = "CommandType", IsPrimaryKey = false)]
    public int CommandType { get; set; }

    [System.Data.Linq.Mapping.Column(Name = "InitiatedDateTime", IsPrimaryKey = false)]
    public DateTime InitiatedDateTime { get; set; }

    [System.Data.Linq.Mapping.Column(Name = "CompletedDateTime", IsPrimaryKey = false)]
    public DateTime CompletedDateTime { get; set; }

    [System.Data.Linq.Mapping.Column(Name = "WasSuccessful", IsPrimaryKey = false)]
    public bool WasSuccessful { get; set; }

    [System.Data.Linq.Mapping.Column(Name = "Message", IsPrimaryKey = false)]
    public string Message { get; set; }

    [System.Data.Linq.Mapping.Column(Name = "ResponseData", IsPrimaryKey = false)]
    public string ResponseData { get; set; }

    [System.Data.Linq.Mapping.Column(Name = "Message_orig", IsPrimaryKey = false)]
    public string Message_orig { get; set; }

    [System.Data.Linq.Mapping.Column(Name = "Message_XX", IsPrimaryKey = false)]
    public string Message_XX { get; set; }

}


0

আমি বেসরকারী স্থানীয় সদস্য এবং পাবলিক অ্যাক্সেসার / মিউটরদের সাথে আমার ক্লাস সেটআপ করতে চাই। সুতরাং আমি এটি করতে ওপরে অ্যালেক্সের স্ক্রিপ্টটি পরিবর্তন করেছি এবং যেভাবে ছেদ করা হয়েছে for

declare @TableName sysname = 'TABLE_NAME'
declare @result varchar(max) = 'public class ' + @TableName + '
{'

SET @result = @result + 
'
    public ' + @TableName + '()
    {}
';

select @result = @result + '
    private ' + ColumnType + ' ' + ' m_' + stuff(replace(ColumnName, '_', ''), 1, 1, lower(left(ColumnName, 1))) + ';'
from
(
    select 
        replace(col.name, ' ', '_') ColumnName,
        column_id,
        case typ.name 
            when 'bigint' then 'long'
            when 'binary' then 'byte[]'
            when 'bit' then 'bool'
            when 'char' then 'string'
            when 'date' then 'DateTime'
            when 'datetime' then 'DateTime'
            when 'datetime2' then 'DateTime'
            when 'datetimeoffset' then 'DateTimeOffset'
            when 'decimal' then 'decimal'
            when 'float' then 'float'
            when 'image' then 'byte[]'
            when 'int' then 'int'
            when 'money' then 'decimal'
            when 'nchar' then 'char'
            when 'ntext' then 'string'
            when 'numeric' then 'decimal'
            when 'nvarchar' then 'string'
            when 'real' then 'double'
            when 'smalldatetime' then 'DateTime'
            when 'smallint' then 'short'
            when 'smallmoney' then 'decimal'
            when 'text' then 'string'
            when 'time' then 'TimeSpan'
            when 'timestamp' then 'DateTime'
            when 'tinyint' then 'byte'
            when 'uniqueidentifier' then 'Guid'
            when 'varbinary' then 'byte[]'
            when 'varchar' then 'string'
            else 'UNKNOWN_' + typ.name
        end ColumnType
    from sys.columns col
        join sys.types typ on
            col.system_type_id = typ.system_type_id AND col.user_type_id = typ.user_type_id
    where object_id = object_id(@TableName)
) t
order by column_id

SET @result = @result + '
'

select @result = @result + '
    public ' + ColumnType + ' ' + ColumnName + ' { get { return m_' + stuff(replace(ColumnName, '_', ''), 1, 1, lower(left(ColumnName, 1))) + ';} set {m_' + stuff(replace(ColumnName, '_', ''), 1, 1, lower(left(ColumnName, 1))) + ' = value;} }' from
(
    select 
        replace(col.name, ' ', '_') ColumnName,
        column_id,
        case typ.name 
            when 'bigint' then 'long'
            when 'binary' then 'byte[]'
            when 'bit' then 'bool'
            when 'char' then 'string'
            when 'date' then 'DateTime'
            when 'datetime' then 'DateTime'
            when 'datetime2' then 'DateTime'
            when 'datetimeoffset' then 'DateTimeOffset'
            when 'decimal' then 'decimal'
            when 'float' then 'float'
            when 'image' then 'byte[]'
            when 'int' then 'int'
            when 'money' then 'decimal'
            when 'nchar' then 'char'
            when 'ntext' then 'string'
            when 'numeric' then 'decimal'
            when 'nvarchar' then 'string'
            when 'real' then 'double'
            when 'smalldatetime' then 'DateTime'
            when 'smallint' then 'short'
            when 'smallmoney' then 'decimal'
            when 'text' then 'string'
            when 'time' then 'TimeSpan'
            when 'timestamp' then 'DateTime'
            when 'tinyint' then 'byte'
            when 'uniqueidentifier' then 'Guid'
            when 'varbinary' then 'byte[]'
            when 'varchar' then 'string'
            else 'UNKNOWN_' + typ.name
        end ColumnType
    from sys.columns col
        join sys.types typ on
            col.system_type_id = typ.system_type_id AND col.user_type_id = typ.user_type_id
    where object_id = object_id(@TableName)
) t
order by column_id

set @result = @result  + '
}'

print @result

0

এর আগে সমাধানগুলিতে একটি সামান্য সংযোজন: object_id(@TableName)কেবলমাত্র যদি আপনি ডিফল্ট স্কিমাতে থাকেন তবে কাজ করে।

(Select id from sysobjects where name = @TableName)

প্রদত্ত যে কোনও স্কিমাতে কাজ করে টেবিলনামটি অনন্য।


0

যদি এটি অন্য কারও পক্ষে কার্যকর হয়, অ্যাট্রিবিউট ম্যাপিংস ব্যবহার করে একটি কোড-ফার্স্ট পদ্ধতির উপর কাজ করা, আমি এমন কিছু চাইছিলাম যা কেবলমাত্র আমাকে অবজেক্টের মডেলটিতে একটি সত্তাকে বাঁধতে হবে। তাই কার্নোটৌরসের জবাবের জন্য ধন্যবাদ, আমি তাদের নিজস্ব পরামর্শ অনুযায়ী এটিকে প্রসারিত করেছি এবং কয়েকটি টুইট করেছি।

এটি তাই দুটি সমাধান অংশের সমন্বয়ে এই সমাধানের উপর নির্ভর করে, উভয়ই এসকিউএল স্কেলার-মূল্যবান ফাংশন:

  1. একটি 'ইনিশিয়াল ক্যাপস' ফাংশন ( https://social.msdn.microsoft.com/forums/sqlserver/en-US/8a58dbe1-7a4b-4287-afdc-bfecb4e69b23/simar-to-initcap-in-sql- থেকে নেওয়া সার্ভার- tsql এবং আমার চাহিদা মেটাতে সামান্য পরিবর্তিত)
ALTER function [dbo].[ProperCase] (@cStringToProper varchar(8000))
returns varchar(8000)
as
begin
   declare  @Position int
    select @cStringToProper = stuff(lower(@cStringToProper) , 1 , 1 , upper(left(@cStringToProper , 1)))
        , @Position = patindex('%[^a-zA-Z][a-z]%' , @cStringToProper collate Latin1_General_Bin)

   while @Position > 0
         select @cStringToProper = stuff(@cStringToProper , @Position , 2 , upper(substring(@cStringToProper , @Position , 2)))
              , @Position = patindex('%[^a-zA-Z][a-z]%' , @cStringToProper collate Latin1_General_Bin)

  select @cStringToProper = replace(@cStringToProper, '_','')

   return @cStringToProper
end
  1. আউটপুট ফাংশন নিজেই, যা কার্নোটৌরাস এর সমাধান এর দ্বারা প্রসারিত করে:

    • সঠিকভাবে নিউলাইন অক্ষরের আউটপুট
    • কিছু বেসিক টেবুলেশন সম্পাদন করা হচ্ছে
    • একটি উপযুক্ত একটি [টেবিল] ম্যাপিং লিখুন (প্রস্তাবিত হিসাবে)
    • প্রকারের নাম (প্রস্তাবিত) সহ একটি উপযুক্ত [কলাম] ম্যাপিং রচনা
    • সত্তার নামটি টেবিলের নাম থেকে পৃথক হতে দেওয়া
    • যখন আপনার কাছে প্রচুর কলামের টেবিল রয়েছে তখন মুদ্রণ @ ফলাফলের ছাঁটাইয়ের সীমাবদ্ধতা স্থির করে
CREATE FUNCTION [dbo].[GetEntityObject] (@NameSpace NVARCHAR(MAX), @TableName NVARCHAR(MAX), @EntityName NVARCHAR(MAX))  RETURNS NVARCHAR(MAX) AS BEGIN

DECLARE @result NVARCHAR(MAX)

SET @result = @result + 'using System;' + CHAR(13) + CHAR(13) 

IF (@NameSpace IS NOT NULL)  BEGIN
    SET @result = @result + 'namespace ' + @NameSpace  + CHAR(13) + '{' + CHAR(13)  END

SET @result = @result + '[Table(name: ' + CHAR(34) + @TableName + CHAR(34) + ')]' + CHAR(13) SET @result = @result + 'public class ' + @EntityName + CHAR(13) + '{' + CHAR(13) 

SET @result = @result + '#region Instance Properties' + CHAR(13)  

SELECT @result = @result + CHAR(13)     + '[Column(name: ' + CHAR(34) + OriginalColumnName + CHAR(34) + ', TypeName = ' + CHAR(34) + DataType
+ CHAR(34) + ')]' + CHAR(13)
    + 'public ' + ColumnType + ' ' + ColumnName + ' { get; set; } ' + CHAR(13)  FROM (
    SELECT dbo.ProperCase (c.COLUMN_NAME)   AS ColumnName 
        , CASE c.DATA_TYPE   
            WHEN 'bigint' THEN
                CASE C.IS_NULLABLE
                    WHEN 'YES' THEN 'Int64?' ELSE 'Int64' END
            WHEN 'binary' THEN 'Byte[]'
            WHEN 'bit' THEN 
                CASE C.IS_NULLABLE
                    WHEN 'YES' THEN 'Boolean?' ELSE 'Boolean' END            
            WHEN 'char' THEN 'String'
            WHEN 'date' THEN
                CASE C.IS_NULLABLE
                    WHEN 'YES' THEN 'DateTime?' ELSE 'DateTime' END                        
            WHEN 'datetime' THEN
                CASE C.IS_NULLABLE
                    WHEN 'YES' THEN 'DateTime?' ELSE 'DateTime' END                        
            WHEN 'datetime2' THEN  
                CASE C.IS_NULLABLE
                    WHEN 'YES' THEN 'DateTime?' ELSE 'DateTime' END                        
            WHEN 'datetimeoffset' THEN 
                CASE C.IS_NULLABLE
                    WHEN 'YES' THEN 'DateTimeOffset?' ELSE 'DateTimeOffset' END                                    
            WHEN 'decimal' THEN  
                CASE C.IS_NULLABLE
                    WHEN 'YES' THEN 'Decimal?' ELSE 'Decimal' END                                    
            WHEN 'float' THEN 
                CASE C.IS_NULLABLE
                    WHEN 'YES' THEN 'Single?' ELSE 'Single' END                                    
            WHEN 'image' THEN 'Byte[]'
            WHEN 'int' THEN  
                CASE C.IS_NULLABLE
                    WHEN 'YES' THEN 'Int32?' ELSE 'Int32' END
            WHEN 'money' THEN
                CASE C.IS_NULLABLE
                    WHEN 'YES' THEN 'Decimal?' ELSE 'Decimal' END                                                
            WHEN 'nchar' THEN 'String'
            WHEN 'ntext' THEN 'String'
            WHEN 'numeric' THEN
                CASE C.IS_NULLABLE
                    WHEN 'YES' THEN 'Decimal?' ELSE 'Decimal' END                                                            
            WHEN 'nvarchar' THEN 'String'
            WHEN 'real' THEN 
                CASE C.IS_NULLABLE
                    WHEN 'YES' THEN 'Double?' ELSE 'Double' END                                                                        
            WHEN 'smalldatetime' THEN 
                CASE C.IS_NULLABLE
                    WHEN 'YES' THEN 'DateTime?' ELSE 'DateTime' END                                    
            WHEN 'smallint' THEN 
                CASE C.IS_NULLABLE
                    WHEN 'YES' THEN 'Int16?' ELSE 'Int16'END            
            WHEN 'smallmoney' THEN  
                CASE C.IS_NULLABLE
                    WHEN 'YES' THEN 'Decimal?' ELSE 'Decimal' END                                                                        
            WHEN 'text' THEN 'String'
            WHEN 'time' THEN 
                CASE C.IS_NULLABLE
                    WHEN 'YES' THEN 'TimeSpan?' ELSE 'TimeSpan' END                                         
            WHEN 'timestamp' THEN 
                CASE C.IS_NULLABLE
                    WHEN 'YES' THEN 'DateTime?' ELSE 'DateTime' END                                    
            WHEN 'tinyint' THEN 
                CASE C.IS_NULLABLE
                    WHEN 'YES' THEN 'Byte?' ELSE 'Byte' END                                                
            WHEN 'uniqueidentifier' THEN 'Guid'
            WHEN 'varbinary' THEN 'Byte[]'
            WHEN 'varchar' THEN 'String'
            ELSE 'Object'
        END AS ColumnType
        , c.ORDINAL_POSITION        , c.COLUMN_NAME as OriginalColumnName       ,c.DATA_TYPE as DataType

FROM    INFORMATION_SCHEMA.COLUMNS c WHERE   c.TABLE_NAME = @TableName) t ORDER BY t.ORDINAL_POSITION

SET @result = @result + CHAR(13) + '#endregion Instance Properties' + CHAR(13)  

SET @result = @result  + '}' + CHAR(13)

IF (@TableName IS NOT NULL)  BEGIN
    SET @result = @result + CHAR(13) + '}'  END

return @result END

এমএস এসকিউএল ম্যানেজমেন্ট স্টুডিওর মধ্যে থেকে ব্যবহার:

Dbo.GetEntityObject ('MyNameSpace', 'MyTableName', 'MyEntityName') নির্বাচন করুন

কলামের মান হিসাবে আপনি ভিজ্যুয়াল স্টুডিওতে কপি এবং পেস্ট করতে পারবেন will

এটি যদি কাউকে সাহায্য করে তবে দুর্দান্ত!


আমি [কী] বৈশিষ্ট্যগুলিতে যুক্ত করতে কমছিলাম কারণ ম্যানুয়ালি এটিকে যুক্ত করা যথেষ্ট সহজ। এছাড়াও রিয়েল টু এডম ম্যাপ করতে ব্যর্থ হওয়ার প্রান্তে আপনি একটি ত্রুটি পেতে পারেন ou ডাবল [নুলাবল = সত্য, ডিফল্টভ্যালু =]। যদি এটি হয় তবে প্রাসঙ্গিক সম্পত্তি বা রিয়েলকে মানচিত্রের ফাংশনটি সিঙ্গল এ পরিবর্তনের চেষ্টা করুন।
ভোরটেক্স

0

আমি বেশ কয়েকটি এসকিউএল ভিত্তিক উত্তরগুলি থেকে ধারণাগুলি এখানে প্যাকেজ করেছি, মূলত অ্যালেক্স আজা দ্বারা মূল উত্তরটি ক্লাসিফাইয়ে , একটি কনসোল অ্যাপ্লিকেশন যা একবারে একটি নির্দিষ্ট ডাটাবেসের জন্য সমস্ত ক্লাস তৈরি করে:


উদাহরণস্বরূপ, এমন একটি টেবিল দেওয়া হয়েছে Usersযা দেখতে এটির মতো দেখাচ্ছে:

+----+------------------+-----------+---------------------+
| Id |       Name       | Username  |        Email        |
+----+------------------+-----------+---------------------+
|  1 | Leanne Graham    | Bret      | Sincere@april.biz   |
|  2 | Ervin Howell     | Antonette | Shanna@melissa.tv   |
|  3 | Clementine Bauch | Samantha  | Nathan@yesenia.net  |
+----+------------------+-----------+---------------------+

klassifyUsers.csএটির মতো দেখতে পাওয়া একটি ফাইল তৈরি করবে :

    public class User 
    {
        public int Id {get; set; }
        public string Name { get;set; }
        public string Username { get; set; }
        public string Email { get; set; }
    }

এটি প্রতিটি টেবিলের জন্য একটি ফাইল আউটপুট দেবে। আপনি যা ব্যবহার করবেন না তা ত্যাগ করুন।

ব্যবহার

 --out, -o:
        output directory     << defaults to the current directory >>
 --user, -u:
        sql server user id   << required >>
 --password, -p:
        sql server password  << required >>
 --server, -s:
        sql server           << defaults to localhost >>
 --database, -d:
        sql database         << required >>
 --timeout, -t:
        connection timeout   << defaults to 30 >>
 --help, -h:
        show help

0

ভেবেছিলাম যে আগ্রহী তার জন্য আমি শীর্ষের উত্তরের নিজস্ব প্রকরণটি যুক্ত করব। প্রধান বৈশিষ্ট্যগুলি হ'ল:

  • এটি স্বয়ংক্রিয়ভাবে পুরো স্কিমে সমস্ত টেবিলের জন্য ক্লাস তৈরি করবে। শুধু স্কিমার নাম উল্লেখ করুন।
  • এটি সিস্টেম.ডাটা.লিনক.ম্যাপিং বৈশিষ্ট্যগুলি শ্রেণি এবং প্রতিটি সম্পত্তিতে যুক্ত করবে। লিনক থেকে এসকিউএল ব্যবহার করা যে কারও পক্ষে কার্যকর।

    declare @TableName sysname
    declare @Result varchar(max)
    declare @schema varchar(20) = 'dbo'
    DECLARE @Cursor CURSOR
    
    SET @Cursor = CURSOR FAST_FORWARD FOR
    SELECT DISTINCT tablename = rc1.TABLE_NAME
    FROM INFORMATION_SCHEMA.Tables rc1
    where rc1.TABLE_SCHEMA = @schema
    
    OPEN @Cursor FETCH NEXT FROM @Cursor INTO @TableName
    
    WHILE (@@FETCH_STATUS = 0)
    BEGIN
    set @Result = '[Table(Name = "' + @schema + '.' + @TableName + '")]
    public class ' + Replace(@TableName, '$', '_') + '
    {'
    
    select @Result = @Result + '
        [Column' + PriKey +']
        public ' + ColumnType + NullableSign + ' ' + ColumnName + ' { get; set; }
    '
    from
    (
        select 
            replace(col.name, ' ', '_') ColumnName,
            col.column_id ColumnId,
            case typ.name 
                when 'bigint' then 'long'
                when 'binary' then 'byte[]'
                when 'bit' then 'bool'
                when 'char' then 'string'
                when 'date' then 'DateTime'
                when 'datetime' then 'DateTime'
                when 'datetime2' then 'DateTime'
                when 'datetimeoffset' then 'DateTimeOffset'
                when 'decimal' then 'decimal'
                when 'float' then 'double'
                when 'image' then 'byte[]'
                when 'int' then 'int'
                when 'money' then 'decimal'
                when 'nchar' then 'string'
                when 'ntext' then 'string'
                when 'numeric' then 'decimal'
                when 'nvarchar' then 'string'
                when 'real' then 'float'
                when 'smalldatetime' then 'DateTime'
                when 'smallint' then 'short'
                when 'smallmoney' then 'decimal'
                when 'text' then 'string'
                when 'time' then 'TimeSpan'
                when 'timestamp' then 'long'
                when 'tinyint' then 'byte'
                when 'uniqueidentifier' then 'Guid'
                when 'varbinary' then 'byte[]'
                when 'varchar' then 'string'
                else 'UNKNOWN_' + typ.name
            end ColumnType,
            case 
                when col.is_nullable = 1 and typ.name in ('bigint', 'bit', 'date', 'datetime', 'datetime2', 'datetimeoffset', 'decimal', 'float', 'int', 'money', 'numeric', 'real', 'smalldatetime', 'smallint', 'smallmoney', 'time', 'tinyint', 'uniqueidentifier') 
                then '?' 
                else '' 
            end NullableSign,
            case
                when pk.CONSTRAINT_NAME is not null and ic.column_id is not null then '(IsPrimaryKey = true, IsDbGenerated = true)'
                when pk.CONSTRAINT_NAME is not null then '(IsPrimaryKey = true)'
                when ic.column_id is not null then '(IsDbGenerated = true)'
                else ''
            end PriKey
        from sys.columns col
        join sys.types typ on col.system_type_id = typ.system_type_id AND col.user_type_id = typ.user_type_id
        left outer join sys.identity_columns ic on ic.column_id = col.column_id and col.object_id = ic.object_id
        left outer join (
            SELECT  K.TABLE_NAME ,
                K.COLUMN_NAME ,
                K.CONSTRAINT_NAME
            FROM    INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS C
                    JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS K ON C.TABLE_NAME = K.TABLE_NAME
                                                                     AND C.CONSTRAINT_CATALOG = K.CONSTRAINT_CATALOG
                                                                     AND C.CONSTRAINT_SCHEMA = K.CONSTRAINT_SCHEMA
                                                                     AND C.CONSTRAINT_NAME = K.CONSTRAINT_NAME
            where C.CONSTRAINT_TYPE = 'PRIMARY KEY'
        ) pk on pk.COLUMN_NAME = col.name and pk.TABLE_NAME = @TableName
        where col.object_id = object_id(@schema + '.' + @TableName)
    ) t
    order by ColumnId
    
    set @Result = @Result  + '
    }
    
    '
    
    print @Result
    
    FETCH NEXT FROM @Cursor INTO @TableName
    end
    
    CLOSE @Cursor DEALLOCATE @Cursor
    GO

-1

আপনি সবেমাত্র করেছেন, যতক্ষণ না আপনার টেবিলটিতে দুটি কলাম রয়েছে এবং তাকে 'tblPeople' এর মতো কিছু বলা হয়।

আপনি সর্বদা আপনার নিজের এসকিউএল মোড়কে লিখতে পারেন। আমি আসলে এটি করতে পছন্দ করি, আমি যে কোনও ফ্যাশনে কোড উত্পন্ন করি।

হতে পারে একটি DALক্লাস তৈরি করুন , এবং একটি পদ্ধতি বলা আছে GetPerson(int id), যা সেই ব্যক্তির ডেটাবেস অনুসন্ধান করে এবং তারপরে Personফলাফল সেট থেকে আপনার অবজেক্ট তৈরি করে ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.