Google Mobile Ads

Sunday, December 11, 2016

Belirli bir günden önceki dosyaları silme metodu.

Belirli bir günden önceki dosyaları silme metodu.

Aşağıdaki metod ile "folderPath" klasöründe beforeDayCount parametresinde belirtilen gün sayısından daha önce oluşturulmuş dosyalar silinir.


    Public Shared Sub DeleteFiles(folderPath As String, Optional beforeDayCount As Integer = 30)
        If (folderPath.Trim() <> "" And beforeDayCount <> 0) AndAlso System.IO.Directory.Exists(folderPath) Then
            Dim folderInfo As New System.IO.DirectoryInfo(folderPath)
            Dim fileList As System.IO.FileInfo() = folderInfo.GetFiles()

            For Each fi As System.IO.FileInfo In fileList
                If fi.LastWriteTime <= DateAdd(DateInterval.Day, IIf(beforeDayCount < 0, beforeDayCount, -1 * beforeDayCount), Date.Now) Then
                    Try
                        System.IO.File.Delete(fi.FullName)
                    Catch ex As Exception

                    End Try
                End If
            Next
        End If
    End Sub

Friday, September 9, 2016

ASP.NET Web Service ile NT Domain Hesabı Kullanarak SQL Server'a Bağlanmak (Impersonation Yöntemi ile)

Kurumsal projelerde kullanılan sql generic user, şifre gereksinimi ve şifrenin belirli aralıklarla değiştirilmek istenmesi nedeniyle sorunlara neden olmaktadır. Bu nedenle sql user yerine bir domain üzerinde tanımlı nt user kullanarak şifre ihtiyacını ortadan kaldırmak mümkün.


1) Öncelikle web service’in kurulacağı app server üzerinde svctest adında bir domain user’ı oluşturulup ardından aynı user için SQL Server’daki ilgili database’ e db_owner hakkı verilmelidir.

2) IIS üzerine web service eklenmeden önce Application Pool oluşturulması gerekmektedir. Aşağıdaki şekilde oluşturulmalıdır.

TLS1.2 desteği isteniyorsa .NET CLR sürümü v4.5 ve üzeri olmalıdır.


Monday, August 22, 2016

JQuery.FileDownload plugin'i ile dosya download edilmesi

JQuery.FileDownload (https://github.com/johnculviner/jquery.fileDownload) plugin'ini düzgün çalıştırabilmek için Set-Cookie ve Cache-Control header larının code behind kısmında eklenmesi gerekiyor.

Download.aspx.vb

           Response.Clear()
            Dim timestamp As String = Request.QueryString("timestamp")
            timestamp = CodeHelper.CheckClientContent(timestamp)
            Dim fileName As String = "File_" & timestamp & ".xlsx"

            Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
            Response.AddHeader("Content-Disposition""attachment;filename=" & fileName)

                   Response.AddHeader("Set-Cookie", "fileDownload=true; path=/")
            Response.AddHeader("Cache-Control", "no-cache, no-store, must-revalidate")

EPPlus ile oluşturulmuş excel dosyanın download edilmesi

pck EPPlus package nesnesidir. Aşağıdaki kod try-catch bloğu içerisinde olmalıdır ve ThreadAbortException hatası kesinlikle handle edilmelidir.

            Response.Clear()
            Dim timestamp As String = Request.QueryString("timestamp")
            timestamp = CodeHelper.CheckClientContent(timestamp)
            Dim fileName As String = "File_" & timestamp & ".xlsx"

            Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
            Response.AddHeader("Content-Disposition", "attachment;filename=" & fileName)

            Using myMemoryStream As New MemoryStream
                pck.SaveAs(myMemoryStream)
                myMemoryStream.WriteTo(Response.OutputStream)
                Response.Flush()
                Response.End()

            End Using

Tuesday, August 2, 2016

Linq ile Datatable'daki bir kolona ait distinct verileri list olarak alma

                Dim sku_id_list = (From row In dtReturn.AsEnumerable()
                                    Select row.Field(Of Integer)("sku_id")).Distinct().ToList()

Friday, July 22, 2016

SQL Server'da text split etme

Unutmamak için buraya ekledim. İnceledikten sonra konuyla ilgili buraya bir şeyler 
karalayacağım.
SELECT Source         = q.value('(/n[1])', 'varchar(10)'),
       RecordType     = q.value('(/n[2])', 'varchar(20)'),
       RecordNumber   = q.value('(/n[3])', 'int'),
       Status         = q.value('(/n[4])', 'varchar(5)')
FROM   (
         SELECT   q = Convert(xml,'<n>'+Replace(fieldName,'.','</n><n>')+'</n>')
         FROM     some_TABLE
       ) Q

'How do I split a string so I can access item x?

SQLBulkCopy ile identity kolonu olan bir tabloya veri aktarma

SQLBulkCopy ile identity kolonu olan bir tabloya veri aktarmak için aktarılacak datatable'da identity kolonunun da tanımlı olması ve veritabanı tablosuyla datatable'ın birebir aynı kolon isimlerine sahip olması gerekiyor.

SQLBulkCopy ile aktarmadan önce datatable'daki identity kolonunun satır içerikleri DBNull.Value olarak set edilmelidir.


Örnek:

dsID değerinin veritabanı tarafında identity olarak tanımlı olduğunu varsayalım.

Dim dtVender As New DataTable()

dtVender.Columns.Add(New DataColumn())
dtVender.Columns.Add(New DataColumn())
dtVender.Columns.Add(New DataColumn())
                            

Dim vRow As DataRow = dtVender.NewRow()
vRow.Item(0) = DBNull.Value
vRow.Item(1) = vender_no
vRow.Item(2) = sku_id

dtVender.Rows.Add(vRow)

Wednesday, July 20, 2016

"Microsoft Excel cannot access the file" hatası

Microsoft Excel cannot access the file 'FilePath'. There are several possible reasons:

• The file name or path does not exist.
• The file is being used by another program.
• The workbook you are trying to save has the same name as a currently open workbook.

Bu hatanın çözümünün hata açıklamasıyla hiçbir alakası yok. Aşağıdaki klasörler oluşturulduğunda sorun çözülüyor. Genellikle 64bit sistemlerde, 32 bit uyumlu Excel Interop kullanılıyorsa bu sorunla karşılaşılıyor.

x64: Aşağıda belirtilen klasör yolunu oluşturun.
C:\Windows\SysWOW64\config\systemprofile\Desktop

x86: Aşağıda belirtilen klasör yolunu oluşturun.
C:\Windows\System32\config\systemprofile\Desktop

"There is already an open DataReader associated with this Command which must be closed first." hatası

Bu hatanın bir diğer çözümü:

Connection string değerine MultipleActiveResultSets=true; ibaresini eklemek.

Örnek:

Data Source=SUNUCU;Initial Catalog=MyDB;User ID=KULLANICIADI;Password=SIFRE;Connection Timeout=10;MultipleActiveResultSets=true;

Datatable üzerinde sayfalama işlemi

'Sayfada görüntülenecek kayıt sayısı
Dim pageSize As Integer = 1000

Dim skipNumber As Integer = 0

If pageNo < 1 Then
        skipNumber = 0
Else
        skipNumber = (pageNo - 1) * PageSize
End If

MyDatatable'ın dolu olduğunu düşünürsek ekran üzerinden aktarılacak pageNo üzerinden pageSize adet kadar kaydın DataGridView kontrolü üzerinde görüntülenmesi sağlanır.

Dim pageDT as Datatable=Nothing

Try
      If MyDatatable.Rows.Count > 0 Then
           pageDT = QueryDatatable.AsEnumerable().Skip(skipNumber).Take(PageSize).CopyToDataTable()
      Else
           pageDT = New DataTable
      End If
Catch ex As Exception
      pageDT = New DataTable

End Try

DataGridView.DataSource=pageDT



'How to paging datatable

SQL Bulk Copy ile datatable daki veriyi veritabanındaki bir tabloya aktarma

Dim dtVender As New DataTable()

dtVender.Columns.Add(New DataColumn())
dtVender.Columns.Add(New DataColumn())
dtVender.Columns.Add(New DataColumn())
                            

Dim vRow As DataRow = dtVender.NewRow()
vRow.Item(0) = dsID
vRow.Item(1) = vender_no
vRow.Item(2) = sku_id

dtVender.Rows.Add(vRow)

Datatable'ı doldurduktan sonra aşağıdaki metodu kullanarak datatable içerisindeki verileri "tbl_Vender" tablosuna aktarabilirsiniz.

SQLBulkCopyToTable(dtVender, "tbl_Vender")


Private Sub SQLBulkCopyToTable(ByRef sourceDT As DataTable, destinationTableName As String)
        Try
            Using cn As New SqlConnection(ConfigurationManager.AppSettings("ConnectionString").ToString())
                cn.Open()
                If sourceDT.Rows.Count > 0 Then
                    Using copy As New SqlBulkCopy(cn)
                        copy.DestinationTableName = destinationTableName
                        copy.BulkCopyTimeout = 5000
                        copy.BatchSize = 5000
                        copy.WriteToServer(sourceDT)
                    End Using
                End If
            End Using
        Catch ex As Exception

        End Try
End Sub

LinkWithin

Related Posts Plugin for WordPress, Blogger...